Ember Data始终为路径提取记录

时间:2014-07-16 23:33:33

标签: ember.js ember-data

我刚刚将我的应用程序切换到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');
    }
});

1 个答案:

答案 0 :(得分:2)

将第二个参数传递给过滤器函数{type: 'employee'},将其转换为findQuery + filterfind将始终执行查询请求。如果您只希望在特定路径中每个SPA生命周期调用一次特定资源,则可以添加逻辑以跟踪它。基本概念是这样的:

  1. 检查您是否已经提取
  2. 如果您还没有获取记录
  3. 保存提取的记录
  4. 返回已保存的已提取记录
  5. 实施例

    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>