Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 一次获取所有表单字段/值_Javascript_Forms_Ember.js - Fatal编程技术网

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

Javascript 一次获取所有表单字段/值,javascript,forms,ember.js,Javascript,Forms,Ember.js,在ember.js中创建新表单字段时,似乎有一个多步骤的过程。例如,我创建表单字段: {{input value=email type="email" placeholder="Email" required="required"}} {{input value=password type="password" placeholder="Password" required="required"}} 然后在我的控制器中,我有: App.AccountController = Ember.Obj

在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,然后在数据变量中再次定义为null,以在用户填写字段时获取“值”


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

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

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

email: null,
password: null,
但是,我强烈建议保留它们以用于文档编制。(不过这是不必要的。)

其次,你必须意识到余烬没有“形式”的概念。您没有指定任何表单,只有两个输入框。如果您愿意,您可能可以构建一个表单组件来实现您想要的功能,但我建议您只构建大量表单。最后,你会有相当多的重复

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



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

为了澄清,您是否在寻找一种方法来获取所有表单值,而不必显式列出每个字段?是的,正确,似乎在我创建表单字段之后,我不必将其定义为null,然后再次获取属性。您甚至可以不指定控制器就离开,您可以在路由模型中将其设置为“currentUser”,登录操作(也在路由中)只需传递this.get('currentUser'),它将包含每个表单value@licancabur你能举个简单的例子吗?(在代码中)看起来像这样(在coffeescript中):。在我当前的项目中,我没有提供所需的值。如果您使用的是Ember-data,我不知道这是否是推荐的方法。谢谢您的建议。当我取出空值时,我得到了以下错误:错误:属性集失败:路径“email”中的对象找不到或已被销毁。啊,这可能是因为您使用的是
ObjectController
,而不仅仅是普通的
控制器
ObjectController不推荐使用,您可能应该从
Controller`扩展。这将解决这个问题。我通常不使用
.getProperties
而是将输入绑定到一个对象,然后在操作中可以与该对象进行交互。这非常适用于ember数据,您可以将输入绑定到模型,只需在操作中调用
save()
。还可以考虑为输入使用组件,然后绑定到从对象返回的错误。