灰烬控制器设置属性

时间:2015-01-14 20:52:57

标签: javascript dom ember.js handlebars.js

新的余烬,这是非常愚蠢但我浪费了我的一天。

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

单击该按钮时,我想切换收音机输入上的单击属性,以便单击该按钮。非常简单,但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 to true时,我得到&#34; Uncaught Error:Assertion Failed:无法使用false键调用get。&#34;

1 个答案:

答案 0 :(得分:0)

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

但是,您可以将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