我在Ember-CLI 0.2.7
和Ember-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调用预加载所有项目,然后使用内存中的项目解析与标记的关系。
有没有机会实现这种行为?有些人重新开放,延长,覆盖等?
答案 0 :(得分:0)
使用links
无法实现:如果所有items
已经在store
中。
您可以使用ids
代替links
:
{
"tags": [
{
"id": 1,
// ...
"items": [1, 2, 3],
}
]
}
// or "item_ids" in case of ActiveModelAdapter