我试图将一些数据渲染到表格中。数据按年份组织,用户可以在索引中添加年份。
当用户添加一年时,该年份的数据将通过AJAX加载并添加到Ember.Object
info
,如下所示:
var self=this;
Ember.$.getJSON('url'+year, function(data) {
var info = self.get("info");
info['total'][year] = data.total;
info['commission'][year] = data.commission;
}
在模板中,数据通过each-in
助手显示:
{{#each-in info.total as |k t|}}
{{t}}
{{/each-in}}
根据手册here,由于each-in
未绑定到新属性,因此我在组件中的ajax分配后添加了self.rerender();
。
我的问题是组件没有重新渲染。如果我更改路线并返回,则会重新呈现页面并显示数据,因此问题显然在rerender()调用上。
PS:这里显示的代码是一个简化的例子;有必要使用each-in
的原因,任何需要更改数据结构的解决方案都不会有帮助。我只需要知道为什么rerender()
没有重新渲染以及如何让它这样做。
答案 0 :(得分:4)
由于glimmer 2,您无需为rerender
循环调用each-in
。
现在您可以创建新对象,但更快的解决方案是使用Ember.set
而不是[]
语法。所以替换这个:
info['total'][year] = data.total;
用这个:
Ember.set(info, `total.${year}`, data.total);
它会起作用。
如果您拒绝这样做,请致电notifyPropertyChange
。但是Ember.set
是首选。
结帐this twiddle。
答案 1 :(得分:2)