我试图重新加载模型并重新计算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>
答案 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比较您和我的解决方案。