2013-03-10 103 views
2

在骨干网我会经常使用实例化类似的观点...如何停止骨干事件冒泡

new mysite.some.namespace.View(); 

然后将在我看来,加载和附加事件到DOM。问题是删除该视图,然后再次实例化。如果我加载视图两次,我的事件通常会加倍。我怎样才能消除这一点?这是因为我的el被设置为应用程序的包装元素?

什么是这个简单的解决方案?

+0

是否有可能将视图初始化为另一个视图中的元素?因此,适用于父视图和子视图的任何绑定都会被调用两次... – rudolph9 2013-03-10 02:05:39

+1

您是否正确调用了视图上的'.remove()'(而不是覆盖它)?它应该自动清理它的事件。 – loganfsmyth 2013-03-10 02:06:39

+0

@ rudolph9我确实在主视图中加载了一个子视图,并且它们都具有相同的“el”。我认为这可能是问题。我没有调用.remove(),如果我这样做,它会破坏我的应用程序,删除主视图。 – 2013-03-10 02:10:21

回答

0

您可以使用e.stopImmediatePropagation();以防止事件传播。

3

从评论听起来好像你偏离了骨干直线和狭窄的路径进入杂草。正确的事件处理需要一定的关注。但是,如果您发布的代码较多,我们可以提供更详细的建议,但是:

  • 确保在完成视图实例时致电.remove()。所有DOM事件绑定将被自动删除。
  • 不要做像有两个视图实例引用相同元素(this.el)的怪事。
  • 帮你一个忙,别惹this.el。不要指定它。如果需要,请在您的extend对象中使用tagName,但视图的el应该是A)该视图唯一的,并且B)从DOM分离,直到视图外部的某个东西(通常是路由器或复合视图管理器)。