bon*_*oth 5 javascript ember.js ember-data
详细信息:ember-data-1.0.0.beta.3和默认的RESTAdapter
我可能误解了该store.find()方法的工作原理,但是,根据我的理解,如果我要求的记录已存在于商店中,则以下代码不应查询服务器:
var IndexRoute = Em.Route.extend({
model: function() {
return this.store.find('link');
},
});
Run Code Online (Sandbox Code Playgroud)
从emberjs.com文档中DS.Store.find():
find方法将始终返回将使用记录解析的promise.如果记录已经在商店中,则承诺将立即得到解决.否则,商店将询问适配器的find方法以查找必要的数据.
我有另一条路径与完全相同的模型钩子,但当我访问该路线时,即使数据已经存储在商店中,服务器也会被查询.如果我回到Index路线,它会再次被查询.不应该.find()处理这个?
Mar*_*ior 17
find方法将始终返回将使用记录解析的promise.如果记录已经在商店中,则承诺将立即得到解决.否则,商店将询问适配器的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');
}
});
Run Code Online (Sandbox Code Playgroud)
我做了一个小提琴,请看看http://jsfiddle.net/marciojunior/Az2Uc/
那个小提琴使用jquery mockjax,如果你看到浏览器控制台MOCK GET: /people只显示一次,这就像一个常规的xhr请求,但是它被嘲笑了.转换到people1并且people2不会执行其他请求只需获取本地数据.
| 归档时间: |
|
| 查看次数: |
8823 次 |
| 最近记录: |