Ember 如果模型中有单个项目,视图在 store.unloadAll 后不会更新

Ember view doesn't update after store.unloadAll if single item is in model

所有记录都已从商店中卸载,但在显示单个项目时在视图中不会发生变化。如果显示多个项目,所有内容都会正确更新。

实例: http://emberjs.jsbin.com/mojase/2/edit?html,js,output

singleItem 也应该在所有项目都卸载后消失,但事实并非如此。

这是按预期工作的。

find 不带参数是存储中所有记录的实时集合,因此,当从存储中删除记录时,它也会从该集合中删除。

定义了参数的

find 是单个记录(除非您通过查询查找,但在这种情况下您不是),并且 Ember 数据没有机制用于收回对对象的引用。同样,如果您要从不带参数的 find 调用中获取结果,并将其复制到一个数组中,然后从存储中删除所有项目,则该数组不会被修改。

我不相信 RSVP.hash 是您需要的:

An important note: RSVP.hash is intended for plain JavaScript objects that are just a set of keys and values. RSVP.hash will NOT preserve prototype chains. http://emberjs.com/api/classes/RSVP.html#method_hash

您的模型应该包含 array of objectssingle object,而不是两者。否则,模型本身就会出现不必要的重复。

您可以将您的 route model 与亚马逊进行比较:'I do not know why you need all this stuff, but you ordered it. I promise you I will deliver them. So wait until the package arrives. Then you can filter, order, modify, .. your stuff however you like!'.

您的页面逻辑进入您的 ApplicationController,它就像您的家,您的亚马逊商品到达那里,您可以随心所欲地使用它。

所以在代码中:

App.ApplicationRoute = Ember.Route.extend({
  model: function() {
    return this.store.find("post");
  }
});

App.ApplicationController = Ember.ArrayController.extend({
 singlePost: function() {
   return this.get('model').findBy('id', '1');
 }.property('model.@each.id'),
  actions: {
    unload: function(){
      this.store.unloadAll("post");
    }
  }
});

注意 我使用 ArrayController 因为我要返回一个记录数组。当通过您的模型仅返回 1 条记录时使用 Controller

工作 jsbin:http://emberjs.jsbin.com/zasorasido/1/edit?html,js,output