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

时间:2015-03-10 11:29:43

标签: ember.js view model ember-data

所有记录都是从商店中卸载的,但是当显示单个项目时,它不会在视图中更改。如果显示多个项目,则所有内容都会正确更新。

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

卸载所有项目时,

singleItem也应该消失,但它没有。

2 个答案:

答案 0 :(得分:2)

这是按预期工作的。

没有参数的

find是商店中所有记录的实时集合,因此,当从商店中删除记录时,它将从该集合中删除。

定义参数的

find是一条记录(除非你通过查询找到,但在这种情况下你不是),而Ember Data没有一种机制可以将你的引用撤回到宾语。同样,如果您在没有参数的情况下从find调用中获取结果,并将其复制到数组中,则从存储中删除所有项目,该数组将不会被修改。

答案 1 :(得分:1)

我不相信你需要RSVP.hash

  

重要说明:RSVP.hash适用于纯JavaScript对象   这只是一组键和值。 RSVP.hash不会保留   原型链。   http://emberjs.com/api/classes/RSVP.html#method_hash

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

你可以将你的route model与亚马逊进行比较:'我不知道为什么你需要这些东西,但是你订购了它。我向你保证,我会送他们。所以等到包裹到货。然后你可以过滤,订购,修改......你喜欢的东西!'

你的页面逻辑进入你的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