繁体   English   中英

ember-data - store.find('model')总是查询服务器

[英]ember-data - store.find('model') always queries the server

详细信息:ember-data-1.0.0.beta.3和默认的RESTAdapter

我可能误解了store.find()方法是如何工作的,但是,根据我的理解,如果我要求的记录已存在于商店中,则以下代码不应查询服务器:

var IndexRoute = Em.Route.extend({
    model: function() {
       return this.store.find('link');
    },
});

来自DS.Store.find()的emberjs.com文档:

find方法将始终返回将使用记录解析的promise。 如果记录已经在商店中,则承诺将立即得到解决。 否则,商店将询问适配器的find方法以查找必要的数据。

我有另一条路径与完全相同的模型钩子,但当我访问该路线时,即使数据已经存储在商店中,服务器也会被查询。 如果我回到Index路线,它会再次被查询。 不应该.find()处理这个吗?

find方法将始终返回将使用记录解析的promise。 如果记录已经在商店中,则承诺将立即得到解决。 否则,商店将询问适配器的find方法以查找必要的数据。

这通过id this.store.find('link', 1)查找this.store.find('link', 1) 使用this.store.find('link')将始终在服务器中执行请求。

您可以使用this.store.all('link')all方法获取本地数据。 但是在应用程序的某个位置,您需要使用find方法预加载该数据。 否则all不会返回。

您可以使用以下方法获得所需的行为:

App.ApplicationRoute = Ember.Route.extend({
    model: function() {
        // preload all data from the server once
        this.store.find('person');
    }
});

App.LinksRoute = Ember.Route.extend({
  model: function() {      
      // get the local data without request the server
      return this.store.all('person');
  }
});

App.OtherRoute = Ember.Route.extend({
  model: function() {
      // get the local data without request the server
      return this.store.all('person');
  }
});

我做了一个小提琴,请看看http://jsfiddle.net/marciojunior/Az2Uc/

那个小提琴使用jquery mockjax,如果你看到浏览器控制台MOCK GET: /people只显示一次,这就像一个常规的xhr请求,但是它被嘲笑了。 转换到people1people2将不会执行其他请求只获取本地数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM