重新计算arrangeContent

时间:2015-05-20 11:20:57

标签: javascript ember.js ember-cli

我试图重新加载模型并重新计算arrangeContent。该模型似乎正在重新加载,但ArrangeContent未重新计算。排序数据很好,它添加和删除导致问题的数据。

reloadModelData: function () {
  this.get('target.router').refresh();
}

我的模板如下:

{{#each project in arrangedContent}}
<tr>
  <td>{{project.name}}</td>
  ...
</tr>
{{/each}}

编辑:

路由/项目/ index.js

import Ember from 'ember';

export default Ember.Route.extend({
  model: function () {
    return this.store.findAll('project');
  }

});

控制器/项目/ index.js

import Ember from 'ember';

export default Ember.Controller.extend(Ember.SortableMixin, { 
  queryParams: ['sortProperties', 'sortAscending'],
  sortProperties: ['name'],

  actions: {
    ...

    reloadModelData: function () {
      this.get('target.router').refresh();
    }
  }
});

按钮是触发reloadModelData

的按钮
<button {{action 'reloadModelData'}}>Reload</button>

1 个答案:

答案 0 :(得分:1)

您的model挂钩未在您的操作中执行。为什么?您正在#refresh()执行targer.router,这不是当前路线,而是Router

那么,您如何刷新模型?

有一项名为data-down-action-up的惯例。它支持向对象发送操作,例如,父母可以更改数据。可能的解决方案是让您的reloadModelData冒泡到路线并在route处理此操作。然后,在该操作中,您可以再次获取数据并将其设置在控制器上:

# controller code    
reloadModelData: function() {
  return true;
}

在途中:

# route code
reloadModelData: function() {
  this.store.find('project').then((function(_this) {
    return function(projects) {
      _this.get('controller').set('model', projects);
    };
  })(this));
}

如果find的结果与之不同,则model相关的计算属性肯定会重新计算。

Here is a working demo in JSBin比较您和我的解决方案。