我将 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-data 这些商品已经在商店中,并且它可以在商店中的标签中查找所有商品?
随后的 ajax 调用对我来说很烦人的用例是无限滚动
的简单版本。再次从服务器获取所有项目对用户体验不利,因为它会使滚动卡顿。我认为最好的事情是使用单个 ajax 调用预加载所有项目,然后使用内存中的项目解析与标签的关系。
有机会实现这种行为吗?有些重新打开、扩展、覆盖等?
最佳答案
使用链接
,无法实现:所有商品
是否已在商店
中。
您可以使用ids
代替链接
:
{
"tags": [
{
"id": 1,
// ...
"items": [1, 2, 3],
}
]
}
// or "item_ids" in case of ActiveModelAdapter
关于javascript - 如果将关系指定为链接,则防止 ember-data 从服务器重新加载关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30886877/