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

emberjs get all form fields / values at once

本文关键字:表单 字段 获取 一次 emberjs      更新时间:2023-09-26

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

{{input value=email type="email" placeholder="Email" required="required"}}
{{input value=password type="password" placeholder="Password" required="required"}}

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

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

正如您所看到的,电子邮件和密码在顶部被定义为null,然后在数据var中再次定义,以在用户填写字段时获得"值"。

有没有办法绕过这一点,我可以简单地说。。。取表单字段中的所有值,赋值为null,然后在一行中获取所有表单字段值?可能类似于jQuery中的序列化表单?

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

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

email: null,
password: null,

但是,我强烈建议将它们保存起来,以备存档之用。(不过没有必要。)

其次,你必须意识到Ember没有"形式"的概念。您没有指定任何表单,只有两个输入框。如果你愿意,你可能会构建一个表单组件来做你想做的事情,但我只建议你构建很多的表单。最后,你会有相当多的重复。

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


编辑:我没有注意到正在使用ObjectController。如果没有在控制器上显式设置字段,则转发对控制器内容的get和set调用。这意味着删除这两条线是行不通的。但是,如果从Controller而不是ObjectController(无论如何都不推荐使用)进行扩展,它将起作用。