如何在更改Ember.js中的复选框时触发命名操作?任何帮助将不胜感激。
这就是我所拥有的。选中或取消选中该复选框无效。
模板:
{{input type="checkbox" on="change" action="applyFilter"}}
控制器:
actions: {
applyFilter: function() {
console.log("applyFilter");
}
}
答案 0 :(得分:61)
我想发布更新。在Ember 1.13.3+中,您可以使用以下内容:
<input type="checkbox"
checked={{isChecked}}
onclick={{action "foo" value="target.checked"}} />
答案 1 :(得分:24)
使用观察者似乎是观看复选框更改的最简单方法
{{input type='checkbox' checked=foo}}
foo:undefined,
watchFoo: function(){
console.log('foo changed');
}.observes('foo')
http://emberjs.jsbin.com/kiyevomo/1/edit
或者您可以创建自己的发送操作的复选框实现
App.CoolCheck = Ember.Checkbox.extend({
hookup: function(){
var action = this.get('action');
if(action){
this.on('change', this, this.sendHookup);
}
}.on('init'),
sendHookup: function(ev){
var action = this.get('action'),
controller = this.get('controller');
controller.send(action, this.$().prop('checked'));
},
cleanup: function(){
this.off('change', this, this.sendHookup);
}.on('willDestroyElement')
});
{{view App.CoolCheck action='cow' checked=foo}}
答案 2 :(得分:12)
发布Ember版本&gt; = 1.13,请参阅Kori John Roys' answer。
这适用于1.13之前的Ember版本
这是ember的{{input type=checkbox}}
帮助器中的错误。
请参阅https://github.com/emberjs/ember.js/issues/5433
我喜欢有替身的想法。 @ Kingpin2k的解决方案可行,但全局访问视图已被弃用,使用观察者并不是很好。
在链接的github ember问题中,rwjblue建议组件版本:
App.BetterCheckboxComponent = Ember.Component.extend({
attributeBindings: ['type', 'value', 'checked', 'disabled'],
tagName: 'input',
type: 'checkbox',
checked: false,
disabled: false,
_updateElementValue: function() {
this.set('checked', this.$().prop('checked'));
}.on('didInsertElement'),
change: function(event){
this._updateElementValue();
this.sendAction('action', this.get('value'), this.get('checked'));
},
});
模板中的示例用法('checked'和'disabled'是可选的):
{{better-checkbox name=model.name checked=model.checked value=model.value disabled=model.disabled}}
答案 3 :(得分:4)
对于那些使用Ember&gt; 2.X:
{{input
change=(action 'doSomething')
type='checkbox'}}
和行动:
actions: {
doSomething() {
console.warn('Done it!');
}
}
答案 4 :(得分:-3)
在Ember v1.13中,只需在我的场合创建一个名为j-check的组件即可完成(无需布局内容):
$
然后你就可以从你的模板中调用它:
import Ember from 'ember';
export default Ember.Checkbox.extend({
change(){
this._super(...arguments);
this.get('controller').send(this.get('action'));
}
});