当使用动态路径输入余烬路径时,如果存储的对象存在且未发出服务器请求,则ember数据将加载预先加载的对象。例如:
App.SomethingRoute=Ember.route.extend({
model:function(params){
this.store.find("something",params.something_id)
}
})
我的应用是这样的,我不想执行依赖模型服务器端的更新(我将为简单的关系,但还有其他我想从服务器拉取更新的记录)。所以我已经能够通过在afterModel钩子中加入服务器请求来解决问题:
App.SomethingRoute=Ember.route.extend({
model:function(params){
this.store.find("something",params.something_id)
},
afterModel:function(model){
$.getJSON("/somethings/"+model.id).then(function(data){
var serialized_something=route.store.serializerFor("something").normalize(TaxProgram.Something,data.something)
route.store.update("something",serialized_something)
})
})
我无法弄清楚的是如何检查模型钩子是否实际被调用,并且在这种情况下不会进行额外浪费的afterModel调用。我可以在包含此信息的路线上设置属性,但我希望Ember有一个方法来执行此操作。有什么建议吗?
答案 0 :(得分:2)
不,Ember没有具体规定处理您描述的情况。
在类似的情况下,我完全按照你所说的要避免,即设置一个属性来记住是否已经调用了model
钩子。 beforeModel
是初始化该属性的有用位置。
但是,您对此概念的实现存在缺陷,并且您在afterModel
挂钩中复制了过多的Ember数据逻辑。相反,您应该只考虑使用unload
在不必要时从本地商店中删除模型实例,并在下次对其执行find
时强制刷新,或者在reload
处执行{{1}}适当的点强迫重装。