我刚刚将我的应用程序切换到Ember CLI和Ember-Data(以前使用的是Ember Model)。当我转换到我的员工路由时,ember数据在api的用户路由上执行GET请求,并按预期进行查询。但是,每当我离开这条路线并返回时,它继续在api上执行GET请求。这些结果不应该被缓存吗?我在模型上运行了一个过滤器,但是我删除了它并仍然遇到了同样的问题。
路线w /过滤器:
import Ember from 'ember';
export default Ember.Route.extend({
model: function() {
// This queries the server every time I visit the route
return this.store.filter('user', {type: 'employee'}, function(user) {
if(! Ember.isEmpty(user.get('roles'))) {
return user.get('roles').contains('employee');
}
});
}
});
路由w / out过滤器:
import Ember from 'ember';
// This still queries the server every time I visit the route
export default Ember.Route.extend({
model: function() {
return this.store.find('user');
}
});
答案 0 :(得分:2)
将第二个参数传递给过滤器函数{type: 'employee'}
,将其转换为findQuery
+ filter
,find
将始终执行查询请求。如果您只希望在特定路径中每个SPA生命周期调用一次特定资源,则可以添加逻辑以跟踪它。基本概念是这样的:
export default Ember.Route.extend({
model: function() {
//resultPromise will return undefined the first time... cause it isn't defined
var resultPromise = this.get('resultPromise') || this.store.find('user');
this.set('resultPromise', resultPromise);
return resultPromise;
}
});
此外,如果您已经调用find
,您也可以使用store.all('type')
在商店客户端获取该类型的所有记录,而无需调用服务器。< / p>