Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ember data-store.find(';model';)始终查询服务器_Javascript_Ember.js_Ember Data - Fatal编程技术网

Javascript ember data-store.find(';model';)始终查询服务器

Javascript ember data-store.find(';model';)始终查询服务器,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,详细信息:ember-data-1.0.0.beta.3和默认的重新适应程序 我可能误解了store.find()方法的工作原理,但据我所知,如果我要查询的记录已经存在于存储中,则以下代码不应查询服务器: var IndexRoute = Em.Route.extend({ model: function() { return this.store.find('link'); }, }); 从DS.Store.find()的emberjs.com文档中: find

详细信息:ember-data-1.0.0.beta.3和默认的重新适应程序

我可能误解了
store.find()
方法的工作原理,但据我所知,如果我要查询的记录已经存在于存储中,则以下代码不应查询服务器:

var IndexRoute = Em.Route.extend({
    model: function() {
       return this.store.find('link');
    },
});
DS.Store.find()
的emberjs.com文档中:

find方法将始终返回一个承诺,该承诺将与记录一起解决。如果记录已在存储中,承诺将立即得到解决。否则,存储将要求适配器的find方法查找必要的数据

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

find方法将始终返回一个将被解决的承诺 记录在案。如果唱片已经在商店里,承诺 将立即得到解决。否则,商店将询问 适配器的find方法来查找必要的数据

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

您可以使用
all
方法
this.store.all('link')
获取本地数据。但在应用程序的某些地方,您需要使用
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');
  }
});
我摆弄了这个请看一看


该fiddle使用jquery mockjax,如果您看到浏览器控制台,
MOCK GET:/people
只显示一次,这类似于常规的xhr请求,但它是模拟的。转换到
people1
people2
不会执行其他请求,只需获取本地数据即可。

您有用于Chrome的Ember插件吗?您可以查看数据是否在余烬商店中。感谢您的澄清。不过我有一个相关的问题。也许你知道答案:我有一个类别模型,我在ApplicationRoute中加载了一个类别列表。我也有一个CategoryRoute,但我有一个不同的问题
this.store.find('category',params.category\u id)
将查询服务器,但它将使用索引操作,而不是显示操作。但是,如果我没有在ApplicationRoute中加载类别,它将按预期工作。很抱歉,我不理解您的问题。我建议你再提出一个问题,这样其他人可以帮助你。嗨,谢谢你抽出时间。我在这里添加了一个更详细的问题:。如果可以,请看一看。谢谢你的回答。不幸的是,我发现ember data的文档对
find()
方法如何使用缓存有很大的误导。他们在文档中提到过吗?非常感谢你提供的信息。这帮我澄清了一些疑问!!:)