Emberjs - 当后者不在模板上时,如何从compute属性设置另一个属性?

时间:2014-09-10 03:24:42

标签: ember.js ember-cli

这是我previous问题的后续行动,认为它应该有不同的帖子。

我将数据子集设置为不同的属性并使其在模板上可用(并且可更新)。所以我认为我创建了一个空属性,只是set它的值。

更新的模板:

    {{#each test12}}
        {{businessname}}
    {{/each}}

控制器:

test12: [],
test11: function(){
    var bms = this.get('businessmatches').filterBy('type', 'hardware');
    this.set('test12', bms);
    return bms;
}.property('businessmatches.@each.[type]'),

问题是这不起作用。有趣的是,如果我将模板更改为

    {{#each test12}}
        {{businessname}}
    {{/each}}
    <hr/>
    {{#each test11}}
        {{businessname}}
    {{/each}}

然后它有效!!! :○

我可以在display:none; div上隐藏第二部分,或者我可以直接在test12上使用逻辑,但这种行为完全出乎意料(我认为set没有先工作)。我错过了什么吗?有没有正确的方法呢?

1 个答案:

答案 0 :(得分:1)

通常,最好避免计算属性(在您的情况下,设置test12)中的副作用。他们使程序难以推理。

在您的情况下,问题是仅仅引用test12不会计算任何内容。 Ember无法知道test12内部test11已被设置,并且可能需要运行它。然后,当您从模板中引用test11时,会计算它,并设置test12的副作用,它会更新模板(如此之快,您无法看到它;要测试它,您可以在模板的{{debugger}}test12部分之间添加test11,当您在调试器中停止时,您会注意到test12部分仍为空。)< / p>

根据您要完成的工作,您可以执行类似test12: function() { return this.get('test11'); }.property('test11')test12: Ember.computed.alias('test11')的操作,这是相同的事情。