1

我有一个包含几个 textarea 组件的视图。问题是如何从被点击的文本区域中解除“点击”事件的绑定?仅来自特定的。

var StreamView = Backbone.View.extend({

 el: "#stream",

 events: {
 "click textarea" : "addSendCommentButton"
 },

 addSendCommentButton : function(event) {

 this.undelegateEvents();

 }

});
4

3 回答 3

1

如果您只想取消绑定特定事件,则可以使用以下内容:

addSendCommentButton : function(event) {
   this.$el.off('click.delegateEvents' + this.cid, 'textarea');
}

Backbone 使用on带有特定命名空间的 jQuerydelegateEvents加上cid.


恐怕这也将事件与其他文本区域解除绑定。之所以如此,是因为该off方法需要与传递给onjQuery 文档所说的相同的选择器:

要删除特定的委托事件处理程序,请提供选择器参数。选择器字符串必须与附加事件处理程序时传递给 .on() 的字符串完全匹配。


建议

你可以有一个类似的行为改变你的代码:

var StreamView = Backbone.View.extend({

 el: "#stream",

 events: {
 "click textarea.unfinished" : "addSendCommentButton"
 },

 addSendCommentButton : function(event) {

    $(event.target).removeClass("unfinished");

 }

});

使用更具体的选择器来附加事件并在调用回调时删除该类。

于 2013-06-27T09:47:14.400 回答
0

YD1m 的答案是正确的,但我想与您分享另一种方法。如果你想实现一次性事件,你可以使用一种jQuery 方法。

您可以通过两种方式做到这一点:

  1. 通过覆盖delegateEvents方法
  2. 通过在渲染后附加事件 -this.$('textarea').one('click', _.bind(this. addSendCommentButton, this))
于 2013-06-27T09:12:45.163 回答
0

检查这个:

var StreamView = Backbone.View.extend({

     el: "#stream",

     events: {
     "click textarea" : "addSendCommentButton"
     },

     addSendCommentButton : function(e) {
        e.target.removeEventListener('click', 'addSendCommentButton');
     }

    });
于 2013-06-27T09:08:57.593 回答