这是我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
没有先工作)。我错过了什么吗?有没有正确的方法呢?
答案 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')
的操作,这是相同的事情。