On和Off事件不起作用

时间:2016-10-30 12:28:40

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

我使用新系列创建我的视图。

我解除添加和同步事件:

this.mapDetailsCOllection.on('add', self.onAddElement, self);
this.mapDetailsCOllection.on('sync', self.onSync, self);

在获取之前我做了:

this.mapDetailsCOllection.off("add");
this.mapDetailsCOllection.fetch();

当提取正常时,在我的同步回调中​​:

this.mapDetailsCOllection.on('add', self.onAddElement, self);

但即使我推迟添加事件我每次都会在我获取时添加事件回调函数。

2 个答案:

答案 0 :(得分:1)

我将建议以下内容,因为我没有关于如何构建应用程序的任何上下文(Backbone.js很棒,因为它为您提供了很多支持,但是您如何构建应用程序可能会发生很大变化你需要如何实现同步解决方案)。如果您可以分享一些关于如何构建应用程序,视图,集合和模型代码以便了解您要实现的目标,我非常乐意调整,扩展或澄清这篇文章。< / p>

在您的代码中,我会听取update事件而不是add事件(因为add触发每个添加到集合的新项目,与{{1}相比} >在集合中添加/删除任意数量的项目之后触发。然后,我会移除update事件的开/关更改,而是让您的视图收听Collection.reset事件,而不是关闭和关闭您的提取/同步周期的监听器

我过去成功使用过这种类型的View设计模式:

add

答案 1 :(得分:0)

基于此:

  

可以使用可用的集来自定义提取的行为   选项。例如,要获取集合,请获取“添加”事件   对于每个新模型,以及每个已更改现有的“更改”事件   模型,没有删除任何东西:

collection.fetch({remove: false}) 

collection.set(models, [options]) 和此:

  

触发所有相应的“添加”,“删除”和“更改”事件   因为这发生了。返回集合中的触摸模型。如果   您想自定义行为,可以使用以下选项禁用它:   {add:false},{remove:false}或{merge:false}。

你可以通过

collection.fetch({add: false}) 

避免触发add事件。