Backbonejs:如何在删除视图时取消绑定集合绑定?

时间:2012-02-20 15:22:50

标签: backbone.js

我有一个有两个视图的backbonejs应用程序。它看起来像这样:

<body>
  <header></header>
  <div id="content"></div>
</body>

每次加载视图时,应用程序都会通过完全覆盖#content的内容来覆盖当前视图。

// Like this...
$('#content').html( new primaryView().render() );
// ...and this.
$('#content').html( new secondaryView().render() );

该应用程序具有全局集合。

App.Collection();

辅助视图根据全局集合修改自身。因此,它将一个函数绑定到views initialize函数中App.Collection上的'add'事件';

App.Collection.bind('add', function(){
    console.log('Item added');
});

导致我的问题。每次加载辅助视图时,都会将新函数绑定到App.Collection的add事件。如果我从主视图到辅助视图三次,每次将项添加到App.Collection时,该函数将触发三次。

我做错了什么? 如果在视图上有一个uninitialize函数,我可以看到我会怎么做。 如果我在加载后从未删除过视图,我可以看到如何做到这一点。 如果我可以命名Jquery中的事件,我可以看到我会怎么做。 (通过在绑定之前解除绑定)。

2 个答案:

答案 0 :(得分:2)

您可以相当多地概括您的问题。基本上,你正在编写一个事件驱动的应用程序,在这样的应用程序中应该注意事件。

查看this post以查看在骨干网中使用事件处理程序的推荐方法。

答案 1 :(得分:0)

根据具体情况,您可以使用initializerender方法来处理创建视图的不同方面。例如,您可以将绑定放在initialize

initialize: function() {
  App.Collection.bind('add', function(){
    this.view.render()
  });
}

仅在创建视图时触发。这会将您的render方法绑定到add事件。然后在render方法中,您可以实际创建html。

这可以防止每次需要重新渲染时发生绑定。