emberjs一次获取所有表单字段/值

Mat*_*att 9 javascript forms ember.js

在ember.js中创建新的表单字段时,似乎有一个多步骤的过程.例如,我创建表单字段:

{{input value=email type="email" placeholder="Email" required="required"}}
{{input value=password type="password" placeholder="Password" required="required"}}
Run Code Online (Sandbox Code Playgroud)

然后在我的控制器中我有这个:

App.AccountController = Ember.ObjectController.extend({
    email: null,
    password: null,
    actions: {
      login: function() {
        var data = this.getProperties("email", "password");

            console.log(data);
      }
    }
});
Run Code Online (Sandbox Code Playgroud)

如您所见,电子邮件和密码在顶部定义为null,然后在data var中再次定义为在用户填写字段时获取"值".

有没有办法解决这个问题,我可以简单地说...在表单字段中获取所有值,赋值为null,然后在一行中获取所有表单字段值?类似可能在jQuery中序列化表单?

GJK*_*GJK 4

简短的回答是你需要重复。长的答案是,您可以避免重复,但代价不值得。

首先,您不必在控制器中定义字段。这两行可以完全删除:

email: null,
password: null,
Run Code Online (Sandbox Code Playgroud)

但是,我强烈建议保留它们以用于文档目的。(不过它们是不必要的。)

其次,你必须意识到 Ember 没有“形式”的概念。您没有指定任何表单,只是两个输入框。如果您愿意,您可能可以构建一个表单组件来完全执行您想要的操作,但我仅建议您在构建大量表单时这样做。最后,你将会有相当多的重复。

话虽如此,我认为您编写代码的方式是完美的。不要寻找最短的编写代码的方法;寻找最易读的方式来编写代码。您当前拥有的代码是该代码中最具可读性的版本(在我看来)。


编辑:我没有注意到正在ObjectController使用。如果未在控制器上显式设置字段,则将 get 和 set 调用转发到控制器的内容。这意味着删除这两行将不起作用。但是,如果您扩展 fromController而不是ObjectController(无论如何,它已被弃用),它将起作用。

  • 我经常将输入绑定到一个对象,而不是使用“.getProperties”,然后在操作中我可以与该对象进行交互。这对于 ember 数据非常有用,您可以将输入绑定到模型,然后在操作中调用“save()”。还可以考虑使用组件作为输入,因为您还可以绑定到从对象返回的错误。 (2认同)