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

时间:2013-09-12 11:18:13

标签: javascript ember.js handlebars.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}}

并且需要将当前对象作为参数传递给“createUser”操作。 像这样:

action="createUser(this)"

或:

action 'createUser' this

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

我错过了什么吗?

4 个答案:

答案 0 :(得分:10)

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

submit=(action 'setName' 'Sal')

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

答案 1 :(得分:7)

我认为使用action查看助手中的input属性无法做到这一点。

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

模板

{{#each}}
      <li>                   
          <form {{action "createUser" this on="submit"}}>
              {{name}}
              {{input type="text" value=name}}          
          </form>
      </li>
  {{/each}}

路线

  ...
  actions: {
    createUser: function(user) {
      alert(user.get('name'));
    }
  }
  ...

因此,当用户点击Enter时,将触发事件。

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

<div {{action "someAction" someObject}} on="click">Click me</div>

在路线中:

actions: {
  someAction: function(someObject) {
    // do something with the someObject
  }
}

有关详细信息,请参阅docs

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

我希望它有所帮助

答案 2 :(得分:2)

最后我最终得到了这个解决方案:

模板

{{input class="newUser" type="text" value=newFullName placeholder="add user"}}
<button {{action 'createUser' this newFullName}}>Send</button>

控制器

createUser: function (fund, newFullName) {
        var fullName = newFullName;                        
        var user = this.store.createRecord('appUser', {
            fullName: fullName,                
            fund: fund,
            payments:[]
        });
        user.save().then(function(){                
            fund.get('users').pushObject(user);                
            fund.save().then(function(){
                fund.reload();
            });
        });
    }

答案 3 :(得分:-3)

您可以将参数传递给操作助手:{{action "doSomething" xxx }}

doSomething是你的控制器方法,xxx是模板当前上下文中的任何内容。