余烬控制器设置属性在操作

Ember controller set property in action

本文关键字:操作 属性 设置 控制器 余烬      更新时间:2023-09-26

余烬新手,这太愚蠢了,但我浪费了一天的时间。

我正在控制器中创建一组对象,用于在视图中构建单选按钮。

单击

按钮时,我想切换无线电输入上的单击属性,使其显示为单击。很简单,但余烬不断给我带来错误。

这是我的代码(编辑了一些错别字):

IndexController = Ember.ObjectController.extend({
    radioArray : function () {
        var a = [], i = 0;
        while (a.push({ index: i++, clicked: false }), i <= 10);
        return a;
    }.property('radioArray'),
    actions : {
        assignClick : function (item, index) {
             this.toggleProperty(item.clicked);
             // some unrelated business logic here
        }
    }
});

这与

{{#each radioArray}}
    <label {{action "assignClick" this index}}>
        <input type="radio" {{bind-attr value=index checked=clicked}} /> foo
    </label>
{{/each}}

我想要的只是显示已单击正确的单选按钮。但是当我尝试在ctrl中将单击设置为true时,我得到"未捕获的错误:断言失败:无法使用假键调用get"。

如果您尝试使用 Em.Object.toggleProperty ,那么您需要Em.Object . :)有像 Em.getEm.set 这样的函数,您可以将其用于 ember 和非 ember 对象,但没有函数Em.toggleProperty用于非 ember 对象。

但是,您可以将 Em.set 与 Em.get 一起使用来实现切换行为:

Em.set(item, 'clicked', !Em.get(item, 'clicked'));

附言:从属性本身设置属性依赖是没有意义的。(我说的是radioArray : function () {...}.property('radioArray'))。

附注:http://emberjs.jsbin.com/memuwi/2/edit?html,js,output