防止ember-data从服务器重新加载关系,如果它们被指定为链接

时间:2015-06-17 08:58:54

标签: javascript ajax caching ember.js ember-data

我在Ember-CLI 0.2.7Ember-Data v1.0.0-beta.19.2使用Ember 1.13.0。我面临以下问题:

我的标签有很多项目。因此,从标记到项目之间存在hasMany关系。项目也可以属于许多标签,与另一个方向之间也存在hasMany关系。

因此文件models / tag.js如下所示:

export default DS.Model.extend({
    //...
    // Relationships
    items: DS.hasMany('item', {async: true}),
    //...
});

和models / item.js

export default DS.Model.extend({
    //...
    // Relationships
    tags: DS.hasMany('tag', {async: true}),
    //...
});

当我从服务器请求所有标签时,服务器以

响应
{
    "meta": {
        "total": 162
    },
    "tags": [
        {
            "id": 1,
            // ...
            "links": {
                "items": "/tags/1/items"
            }
        }
    ]
}

现在,如果我正在某处var items = tag.get('items') Ember-Data使用ajax调用正确地获取属于该标签的项目。但是,根据用户输入特定页面的位置,可能所有商品都已存在于商店中。所以ajax调用是不必要的。有没有办法告诉Ember数据项目已经在商店中,并且它可以查找商店中标签的所有项目?

后续ajax调用对我来说很烦人的用例是infinite scroll的简单版本。从服务器再次获取所有项目对于用户体验不利,因为它会导致滚动卡顿。我认为最好的方法是使用单个ajax调用预加载所有项目,然后使用内存中的项目解析与标记的关系。

有没有机会实现这种行为?有些人重新开放,延长,覆盖等?

1 个答案:

答案 0 :(得分:0)

使用links无法实现:如果所有items已经在store中。

您可以使用ids代替links

{
  "tags": [
    {
        "id": 1,
        // ...
        "items": [1, 2, 3],
    }
  ]
}
// or "item_ids" in case of ActiveModelAdapter