每次输入Ember Route时发出服务器请求

时间:2014-07-19 17:03:54

标签: ember.js ember-data

当使用动态路径输入余烬路径时,如果存储的对象存在且未发出服务器请求,则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有一个方法来执行此操作。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

不,Ember没有具体规定处理您描述的情况。

在类似的情况下,我完全按照你所说的要避免,即设置一个属性来记住是否已经调用了model钩子。 beforeModel是初始化该属性的有用位置。

但是,您对此概念的实现存在缺陷,并且您在afterModel挂钩中复制了过多的Ember数据逻辑。相反,您应该只考虑使用unload在不必要时从本地商店中删除模型实例,并在下次对其执行find时强制刷新,或者在reload处执行{{1}}适当的点强迫重装。