如何在Handlebars模板的输入字段中使用Ember.js的操作Helper传递参数?

Mas*_*idi 9 javascript handlebars.js ember.js

在我的车把模板中,我有这个循环:

{{#each itemController="fund"}}
    <li>                        
        <label>{{title}}</label>            
        <span>{{amount}}</span>
        {{input type="text" placeholder="new user"
        value=newFullName action="createUser"}}
        {{partial 'user-list'}}
    </li>
{{/each}}
Run Code Online (Sandbox Code Playgroud)

并且需要将当前对象作为参数传递给'createUser'动作.像这样的东西:

action="createUser(this)"
Run Code Online (Sandbox Code Playgroud)

要么:

action 'createUser' this
Run Code Online (Sandbox Code Playgroud)

但似乎ember无法处理输入字段内的操作参数......

我错过了什么吗?

and*_*rov 10

您现在可以传递一个函数以及值 -

submit=(action 'setName' 'Sal')
Run Code Online (Sandbox Code Playgroud)

http://emberjs.com/blog/2015/06/12/ember-1-13-0-released.html#toc_closure-actions

  • 现在这应该是新版本的可接受答案 (2认同)

Mar*_*ior 7

我认为使用view helper中的action属性不可能这样做input.

解决方法可以action使用submit事件将输入包装在使用视图助手的表单中,如下所示:

模板

{{#each}}
      <li>                   
          <form {{action "createUser" this on="submit"}}>
              {{name}}
              {{input type="text" value=name}}          
          </form>
      </li>
  {{/each}}
Run Code Online (Sandbox Code Playgroud)

路线

  ...
  actions: {
    createUser: function(user) {
      alert(user.get('name'));
    }
  }
  ...
Run Code Online (Sandbox Code Playgroud)

因此,当用户按Enter键时,将触发事件.

动作属性和动作视图助手之间的主要区别在于动作视图助手更灵活,您可以提供上下文并将其放在任何标记内:

<div {{action "someAction" someObject}} on="click">Click me</div>
Run Code Online (Sandbox Code Playgroud)

在路线:

actions: {
  someAction: function(someObject) {
    // do something with the someObject
  }
}
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅文档

请在jsfiddle中查看该示例的实际操作http://jsfiddle.net/marciojunior/UAgjX/

我希望它有所帮助