使用{{each}}帮助程序的Ember-cli嵌套模型数组在添加到Ember数据存储时重新呈现整个列表

时间:2015-05-23 13:47:47

标签: ember.js ember-data ember-cli htmlbars

我有一条加载仪表板的路线

// routes/dashboard/index.js
...
  model: function(params) {
    return this.store.find('dashboard', params.dashboard_id);
  }
...

仪表板模型包含与窗口小部件模型的hasMany关系

// models/dashboard.js
...
DS.Model.extend({
  widgets: hasMany('widget', {async: true})
...

小部件模型包含与仪表板模型

的belongsTo关系
// models/widget.js
...
DS.Model.extend({
  dashboard: belongsTo('dashboard', {async: true})
...

dashboard.index模板使用{{each}}帮助程序

呈现窗口小部件
// templates/dashboard/index.js
...
{{#each model.widgets as |widget|}}
  {{widget config="widget"}}
{{/each}}
...

用户可以将小部件添加到其信息中心

// routes/dashboard/index.js
...
actions: {
  addWidget: function() {
    this.store.createRecord('widget', {
      dashboard: this.modelFor('dashboard.index')
      ...
    });
  }
}

虽然这样可行,但在创建新窗口小部件时,将重新呈现所有窗口小部件。

有些注意事项: - 我没有实现View或Controller。 - 如果我改变实现只返回一个小部件集合,导致ember-cli创建一个ArrayController而不是ObjectController,那么每个循环都不会重新渲染(优秀)。但是,仪表板有多个需要渲染的子数组,所以我不能采用这种方法。 - 尽管努力实现对象控制器并创建我自己的阵列控制器,但我无法在这里获得相同的功能。

关于如何在不重新渲染所有小部件的情况下添加小部件的任何建议?

0 个答案:

没有答案