Process Backbone collection在触发事件

时间:2016-06-26 15:56:47

标签: backbone.js backbone-events backbone-collections

我有监听器的Backbone集合和集合视图:

this.listenTo(this.collection, 'reset', this.render);

然后在某些时候我这样做:

myCollection.fetch({
    reset: true,
    success: myCallback
})

我想要的是对模型进行一些更改(甚至可能删除或替换其中一些),具体取决于页面上发生的情况。我希望在呈现视图之前执行此操作。目前我正在尝试在myCallback中进行此操作,但看到它在渲染后调用。

如何在任何事件之前处理获取的数据?

1 个答案:

答案 0 :(得分:2)

您可以使用parse集合方法在事件触发之前修改获取的响应,如:

Backbone.Collection.extend({
 parse: function(response){
   // modify response here
   return response;
 }
});

或者出于某种原因,如果您想在创建模型后在实际模态实例上运行代码,那么您只需手动调用render而不是事件监听器,如:

myCollection.fetch({
  reset: true,
  success: function(collection, response){
   // modify response here
   view.render();
  }
})

或者有一个不同的回调来操纵模态然后调用渲染,如:

Backbone.View.extend({
  initialize: function(){
    this.listenTo(this.collection, 'reset', this.preRender);
  },
  preRender: function(){
    // manipulate models here
    this.render();
  },
  render:  function(){
   // Actual rendering here
  }
});