我正在尝试重新加载模型并重新计算 arrangedContent。该模型似乎正在重新加载,但未重新计算 arrangedContent。对数据进行排序很好,它正在添加和删除导致问题的数据。
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');
}
});
Controller /项目/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>
最佳答案
您的 model
Hook 未在您的操作中执行。为什么?因为你正在 targer.router
上执行 #refresh()
,这不是当前路由,而是 Router
。
那么,如何刷新模型?
有一个约定叫做数据向下 Action 向上。它支持向上发送 Action 到对象,比方说,数据更改的父对象。可能的解决方案是让您的 reloadModelData
冒泡到路由并在 route
中处理此操作。然后,在该操作中,您可以再次获取数据并将它们设置在 Controller 上:
# controller code
reloadModelData: function() {
return true;
}
在 route :
# 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比较你和我的解决方案。
关于javascript - 重新计算 arrangedContent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30348173/