1

我有以下代码:

App.ListsRoute = Ember.Route.extend({
  model: function() {
    // This get's all the lists from the server
    return App.List.findAll()
  }
});

App.ListRoute = Ember.Route.extend({
  model: function(params) {
    // This gets a single list from the server
    // Now there are two copies of the same list!
    // (one from the line below, and on from App.List.findAll)
    return App.List.findById(params.list_id)
  },
});

ListsController 和 ListController 都存在于同一页面上。当我直接导航到列表/lists/:list_id并编辑列表,然后单击{{#linkTo list l}}链接时,会显示原始的未编辑列表。

我想我想要的是一次在浏览器中只有一个列表的副本。或者也许有更好、更惯用的解决方案?

我应该提一下,我没有使用 Ember Data。我正在使用 jQuery AJAX 来获取我的数据。

编辑:

我认为这措辞不好。我试图弄清楚如何在同一页面上有两个控制器。一个控制器具有对象列表,另一个控制器具有这些对象之一的详细视图。我发现详细视图中的对象需要与列表中的对象相同。

从列表视图和“空”索引视图开始时,这似乎有效。使用 {{linkTo item}} 单击对象效果很好。当我深度链接到对象时,我得到了同一对象的重复副本(因为我从服务器上抓取了列表和单个项目)。

然后,这些多个对象允许数据看起来“不同步”。

处理这个问题的好策略是什么?

4

1 回答 1

0

您的问题的概念解决方案是身份映射。Martin Fowler 在这里对其进行了描述:“通过将每个加载的对象保存在地图中,确保每个对象仅加载一次。在引用对象时使用地图查找对象。”

ember-data 和 ember-model 包含一个身份映射,原因与您遇到的相同。

您可能能够适应您的应用程序的简单实现在这里: https ://github.com/shinetech/backbone-identity-map/blob/master/backbone-identity-map.js

于 2013-06-08T02:31:56.453 回答