Ember.js组件重新加载程序未重新加载

Ember.js组件重新加载程序未重新加载,ember.js,Ember.js,我正在尝试将一些数据呈现到表中。数据按年份组织,用户可以在索引中添加年份 当用户添加一年时,该年的数据通过AJAX加载并添加到Ember.Objectinfo,如下所示: var self=this; Ember.$.getJSON('url'+year, function(data) { var info = self.get("info"); info['total'][year] = data.total; info['commission'][year] = data.com

我正在尝试将一些数据呈现到表中。数据按年份组织,用户可以在索引中添加年份

当用户添加一年时,该年的数据通过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 info.total as |k t|}}
  {{t}}
{{/each-in}}
按照手册,由于
中的每个
都没有绑定到新属性,因此我添加了
self.rerender()在组件中的ajax分配之后

我的问题是组件没有重新招标。如果我更改路由并返回,页面将重新链接,数据将显示出来,因此问题显然出在rerender()调用上


PS:这里显示的代码是一个简化的示例;我必须在
中使用
是有原因的,任何需要更改数据结构的解决方案都无济于事。我只想知道为什么
rerender()
没有重新播放,以及如何让它重新播放。

您的余烬版本是什么?您提供的指南是针对2.6.0的,但在Ember 2.6.0中运行的以下内容似乎正在运行。然而;在Glimmer2引入之后(我的意思是从2.10.0版开始),这似乎不起作用。如指南中所示,说明重新渲染的部分已删除。因此,这意味着你不能再以同样的方式实现你想要的


如果必须在
助手中使用
;您可以检查以下在Ember 2.12.0上运行并仍然有效的代码。而不是通过组件内的
self.rerender
强制重新渲染;你可以像Lux所说的那样依赖Ember的
集合
。我更新了twiddle以反映这一点。

你的余烬版本是什么?您提供的指南是针对2.6.0的,但在Ember 2.6.0中运行的以下内容似乎正在运行。然而;在Glimmer2引入之后(我的意思是从2.10.0版开始),这似乎不起作用。如指南中所示,说明重新渲染的部分已删除。因此,这意味着你不能再以同样的方式实现你想要的


如果必须在
助手中使用
;您可以检查以下在Ember 2.12.0上运行并仍然有效的代码。而不是通过组件内的
self.rerender
强制重新渲染;你可以像Lux所说的那样依赖Ember的
集合
。我更新了twiddle以反映这一点。

自从glimmer 2以来,对于
循环中的每个
,您不需要调用
重新渲染器

现在您可以创建新对象了,但是更快的解决方案是只使用
Ember.set
而不是
[]
语法。因此,请将其替换为:

info['total'][year] = data.total;
为此:

Ember.set(info, `total.${year}`, data.total);
它会起作用的

如果您拒绝这样做,您应该调用
notifyPropertyChange
。然而,
Ember.set
是首选


签出。

自从glimmer 2以来,您不需要为
循环中的每个
调用
重新渲染器

现在您可以创建新对象了,但是更快的解决方案是只使用
Ember.set
而不是
[]
语法。因此,请将其替换为:

info['total'][year] = data.total;
为此:

Ember.set(info, `total.${year}`, data.total);
它会起作用的

如果您拒绝这样做,您应该调用
notifyPropertyChange
。然而,
Ember.set
是首选


结帐。

非常感谢!我完全忘了检查版本。没问题!我有时也会遇到这种情况;)非常感谢你!我完全忘了检查版本。没问题!我有时也会遇到这种情况;)<代码>余烬集(this.get('info.total')、年份、data.total)
我推荐
Ember.set(这个,`info.total.${year}`,data.total),但是是的。就是这样。
Ember.set(this.get('info.total')、year、data.total)
我推荐
Ember.set(这个,`info.total.${year}`,data.total),但是是的。就是这样。