将模型推送到商店时更新视图

时间:2013-10-28 16:10:06

标签: ember.js ember-data

我的应用程序中有一个非常复杂的页面,显示了许多不同的模型。我通过/updates REST调用实时更新了其中几个模型。我传递一个last_request_timestamp参数,它返回自上次调用以来创建或修改的模型。

我使用store.push(model, model_json)将模型添加到商店。但是,在推送模型后,模板不会更新。如何确保商店中的模型与视图之间存在绑定?

3 个答案:

答案 0 :(得分:5)

好的,我明白了。 Ember.js FAQ

  另一方面,

过滤器会对商店缓存中的所有记录执行实时搜索。一旦将新记录加载到商店中,过滤器将检查记录是否匹配,如果匹配,则将其添加到搜索结果数组中。如果该数组显示在模板中,它将自动更新。

     

...

     

请注意,如果商店不了解记录,则记录不会显示在过滤器中。您可以使用商店的push()方法确保记录在商店中。

因此,在我希望实时更新的视图的控制器中,我在商店中使用filter()来获取模型。

App.PostController = Ember.ObjectController.extend({
  comments: function() {
    var postId = this.get('id');
    return this.get('store').filter('comment', function(comment) {
      return comment.get('post.id') == postId;
    });
  }.property('comments')
});

现在,只要我push()要存储新的Comment,它就会自动添加到视图中的相应帖子中。

答案 1 :(得分:0)

您可能需要使用pushObject将它们明确地推送到页面上显示的集合中。 store.push将返回实时记录,因此您可以执行此类操作。

var book_record = store.push('book', model_json);
this.get('controllers.books.content').pushObject(book_record);

假设BooksController是标准ArrayController

答案 2 :(得分:0)

不幸的是,它需要两个步骤(但步骤简单)。您需要将其添加到商店,然后保存它的记录,以通过适配器将更改传播到侦听器。

var pushedRecord = store.push(model, model_json);
pushedRecord.save();

此外,如果您有多条记录,则可以拨打pushMany而不是逐个推送。你仍然需要保存每个。

store.pushMany(model, jsonArray).forEach function (pushedInstance) {
  pushedInstance.save();
}