Как передать параметры с помощью помощника действия Ember.js внутри поля ввода из шаблона Handlebars?
в моем шаблоне руля у меня есть этот цикл:
{{#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". Что-то вроде этого:--4-->
action="createUser(this)"
или:
action 'createUser' this
но кажется, что ember не может обрабатывать параметры для действий внутри поля ввода...
Я что-то пропустила?
4 ответов
Я думаю, что это невозможно сделать с помощью action
собственность от input
показать помощника.
обходной путь может быть обернуть ваш ввод в форму, которая использует action
просмотр помощника с помощью события submit, как показано ниже:
шаблон
{{#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, будет инициировано событие.
основное различие между свойством action и помощником action view заключается в том, что action view helper более гибкий, и вы можете предоставить контекст и поместить его внутри любого тега:
<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/
надеюсь, это поможет
теперь вы можете передать функцию вместе со значениями -
submit=(action 'setName' 'Sal')
http://emberjs.com/blog/2015/06/12/ember-1-13-0-released.html#toc_closure-actions
наконец-то я закончил с этим решением:
шаблон
{{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();
});
});
}
вы можете передать параметр помощнику действия:{{action "doSomething" xxx }}
где doSomething-ваш метод контроллера, а xxx-что-либо в текущем контексте шаблона.