【发布时间】:2014-05-13 14:26:34
【问题描述】:
我想在收到记录后缓存我的记录,但我不知道怎么做。根据文档,您可以致电this.store.push('model', record),但它似乎不起作用。 Ember 每次调用路由时都会从服务器请求数据,我只想这样做一次,并在从服务器获取数据后使用本地存储。
如果我尝试按照Documentation 的建议对其进行调试,我会发现没有缓存:
Pd.__container__.lookup('store:main').recordCache
// --> undefined
这是我的路线(我尝试缓存它):
Pd.ProductsRoute = Ember.Route.extend({
model: function () {
var promise = this.store.find('product');
var that = this;
promise.then(function(value) {
// Caching supposed to happen here
value.content.forEach(function(product){
that.store.push('product', product);
});
}, function(reason) {
// on rejection
});
return promise;
}
});
这是相应的适配器(似乎工作正常):
Pd.ProductAdapter = DS.RESTAdapter.extend({
primaryKey: 'nid', // DOES NOT WORK BUT I CAN LIVE WITH THAT (SEE WORKAROUND)
findAll: function(store, type) {
var url = 'ws/rest/products';
return new Ember.RSVP.Promise(function(resolve, reject) {
jQuery.getJSON(url).then(function(data) {
Ember.Logger.debug("Received Products:"); // TRIGGERS EVERY TIME!
var srcPattern = /src=["']([^'"]+)/;
data.forEach(function(product){
product.id = product.nid;
product.field_image = srcPattern.exec(product.field_image)[1];
});
Ember.Logger.debug(data);
Ember.run(null, resolve, {product: data});
}, function(jqXHR) {
jqXHR.then = null; // tame jQuery's ill mannered promises
Ember.run(null, reject, jqXHR);
});
});
}
});
【问题讨论】:
标签: javascript ember.js ember-data