多次触发主干点击事件

Backbone click event being fired multiple times

本文关键字:事件      更新时间:2023-09-26

我看到了很多关于这方面的问题,但没有人解决我的问题。

我有一个带有主div的页面,默认情况下它有一个divone-image。还有一个按钮,您可以添加其他div s。因此,我有一个事件click,它在其他div模板上添加了一个"删除"按钮。像这样:

图像堆栈

<div class="image-stack">
  <div class="one-image">
     ...
     <a id="addImage">Add another image</a>
     ...
  </div>
</div>

图像模板

<script type="text/template" id="another-image-template">
  <div class="one-image">
     ...
     <a id="addImage">Add another image</a>
     <a id="removeImage">Remove image</a>
     ...
  </div>
</script>

查看

events: { 
          'click #addImage' : 'addAnotherImage',
          'click #removeImage' : 'removeThisImage'
},
addAnotherImage: function(e) {
  var another = $('#another-image-template').html();
  $('.images-stack').append(another);
},
removeThisImage: function(e) {
  $(e.currentTarget).closest('.one-image').remove();
}

这很好用。当我点击"添加"按钮时,它在最后一个下面添加了一个新的one-image div;当我点击"删除"按钮时,它会删除我点击的div。如果我更改视图并返回到同一视图(始终使用Backbone中的new创建),则image-stack只有一个div one-image,这很好。但是,当我单击"添加"按钮时,它会附加两个one-image div s。如果我重复前面的步骤,它会添加三个

我已经检查过了,函数被调用了两次(三次左右…)。我不明白为什么会发生这种情况,因为remove()正在从DOM中删除对象,而我总是用new初始化view。有什么想法吗?

您的问题可能与未关闭和取消绑定视图有关。它被称为僵尸视图。通过调用this.remove()this.off()应该会清除对视图的所有引用。

看看以下内容:

  • this.remove()-http://backbonejs.org/#View-删除
  • this.off()-http://backbonejs.org/#Events-关闭

  • https://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/
  • 主干僵尸视图&良好做法
  • 防止主干僵尸视图