【问题标题】:Ember Data is always fetching records for routeEmber Data 总是在获取路由记录
【发布时间】:2014-07-16 23:33:33
【问题描述】:

我刚刚将我的应用程序切换到 Ember CLI 和 Ember-Data(之前使用的是 Ember 模型)。当我转换到我的员工路由时,ember 数据会在 api 的用户路由上执行 GET 请求,并按预期进行查询。但是,每当我离开这条路线并返回时,它都会继续在 api 上执行 GET 请求。这些结果不应该被缓存吗?我在模型上运行了一个过滤器,但我删除了它,仍然遇到了同样的问题。

带过滤器的路线:

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');
            }
        });
    }
});

不带过滤器的路由:

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');
    }
});

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

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

    1. 检查您之前是否提取过
    2. 如果您还没有获取记录
    3. 保存获取的记录
    4. 返回保存的抓取记录

    示例

    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') 在商店客户端获取该类型的所有记录,而无需调用服务器。

    【讨论】:

      猜你喜欢
      • 2015-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-15
      • 1970-01-01
      • 2014-05-06
      • 1970-01-01
      相关资源
      最近更新 更多