Ember 控制器设置 属性 正在运行

Ember controller set property in action

ember 的新手,这是超级愚蠢的,但我已经浪费了我的一天。

我正在我的控制器中创建一个对象数组,我用它来在我的视图中构建单选按钮。

单击按钮时,我想切换单选输入上的 clicked 属性,使其显示为已单击。非常简单,但是 Ember 一直在抛出错误。

这是我的代码(编辑了一些拼写错误):

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 中将 clicked 设置为 true 时,我得到 "Uncaught Error: Assertion Failed: Cannot call get with false key."

如果您尝试使用 Em.Object.toggleProperty,那么您需要 Em.Object。 :) 有 Em.getEm.set 等函数,您可以将它们用于 ember 和非 ember 对象,但没有函数 Em.toggleProperty 用于非 ember 对象ember 个对象。

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

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

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

P.P.S。工作示例:http://emberjs.jsbin.com/memuwi/2/edit?html,js,output