在我的车把模板中,我有这个循环:
{{#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无法处理输入字段内的动作参数......
我错过了什么吗?
答案 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是模板当前上下文中的任何内容。