Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 进程主干收集在触发事件之前获取的数据_Backbone.js_Backbone Events_Backbone.js Collections - Fatal编程技术网

Backbone.js 进程主干收集在触发事件之前获取的数据

Backbone.js 进程主干收集在触发事件之前获取的数据,backbone.js,backbone-events,backbone.js-collections,Backbone.js,Backbone Events,Backbone.js Collections,我有主干集合和带有侦听器的集合视图: this.listenTo(this.collection, 'reset', this.render); 然后在某个时候我会这样做: myCollection.fetch({ reset: true, success: myCallback }) 我想要的是根据页面上发生的情况对模型进行一些更改(甚至可能删除或替换其中的一些)。我想在渲染视图之前执行此操作。目前,我正试图在myCallback中执行此操作,但看到它在渲染后被调用 如何在

我有主干集合和带有侦听器的集合视图:

this.listenTo(this.collection, 'reset', this.render);
然后在某个时候我会这样做:

myCollection.fetch({
    reset: true,
    success: myCallback
})
我想要的是根据页面上发生的情况对模型进行一些更改(甚至可能删除或替换其中的一些)。我想在渲染视图之前执行此操作。目前,我正试图在
myCallback
中执行此操作,但看到它在渲染后被调用


如何在任何事件发生之前处理提取的数据?

您可以在事件触发之前使用
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();
  }
})
或者使用一个不同的回调函数来处理模式,然后调用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
  }
});

您可以使用收集的
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();
  }
})
或者使用一个不同的回调函数来处理模式,然后调用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
  }
});

我认为第二个解决方案就是我所需要的。但触发一些事件进行渲染,而不是在集合中存储查看链接,这不是更好吗?@DenisK。“在集合内部存储查看链接”-不,我的第二个示例假设您正在执行
myCollection.fetch({
在视图或路由器内部,您在其中有对自身的引用。不要在模型/集合中创建任何指向视图的链接。如果您的集合构造函数可以访问集合实例,如
myCollection
,则设计有问题……无论如何,如果您想继续处理事件,我添加了一个替代方法。我认为没有第二个解决方案是我需要的。但是触发一些事件进行渲染,而不是存储链接以查看内部集合,不是更好吗?@DenisK。“存储链接以查看内部集合”-不,我的第二个示例假设您正在执行
myCollection.fetch({
在视图或路由器内部,您在其中有对自身的引用。不要在模型/集合中创建任何指向视图的链接。如果您的集合构造函数可以访问集合实例,如
myCollection
,则设计有问题……无论如何,如果您想继续处理事件,我添加了一个替代方法。