javascript - 如果将关系指定为链接,则防止 ember-data 从服务器重新加载关系

标签 javascript ajax caching ember.js ember-data

我将 Ember-CLI 0.2.7Ember-Data v1.0.0-beta.19.2Ember 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/

相关文章:

javascript - 手动触发 jQuery 自动完成

javascript - 连接速度较慢时 float JQuery 菜单问题

javascript - JavascriptMVC Controller 事件处理程序中的自定义选择?

javascript - 如何检查 Facebook 开发用户是否属于应用程序的管理员、开发人员或测试人员角色?

php - 我的 AJAX 代码不更新数据库

css - 防止 CSS 和 jQuery(移动)被缓存

c - malloc:从内存中获取信息

android - 什么时候将缓存数据提交到android中的数据库中

javascript - 仅使用 Javascript 访问 DOM 元素

javascript - 将 dom 中的 child 附加到另一个 div 中,但要保持在同一位置