我有一个包含几个textarea组件的视图。问题是如何从单击的textarea解除“click”事件的绑定?只有特定的一个。
var StreamView = Backbone.View.extend({
el: "#stream",
events: {
"click textarea" : "addSendCommentButton"
},
addSendCommentButton : function(event) {
this.undelegateEvents();
}
});
答案 0 :(得分:1)
如果您只想取消绑定特定事件,可以使用以下内容:
addSendCommentButton : function(event) {
this.$el.off('click.delegateEvents' + this.cid, 'textarea');
}
Backbone使用jQuery on
将事件附加到特定的命名空间delegateEvents
加上cid
。
我担心这也会解除其他文本中的事件。这是因为off
方法需要与jQuery文档中传递给on
的选择器相同的选择器:
要删除特定的委派事件处理程序,请提供选择器 论点。选择器字符串必须与传递给的字符串完全匹配 附加事件处理程序时的.on()。
您可以使用类似的行为更改您的代码:
var StreamView = Backbone.View.extend({
el: "#stream",
events: {
"click textarea.unfinished" : "addSendCommentButton"
},
addSendCommentButton : function(event) {
$(event.target).removeClass("unfinished");
}
});
使用更具体的选择器来附加事件,并在调用回调时删除该类。
答案 1 :(得分:0)
检查一下:
var StreamView = Backbone.View.extend({
el: "#stream",
events: {
"click textarea" : "addSendCommentButton"
},
addSendCommentButton : function(e) {
e.target.removeEventListener('click', 'addSendCommentButton');
}
});
答案 2 :(得分:0)
YD1m答案是正确的,但我想以另一种方式与您分享如何做到这一点。 如果您想要实现一次性事件,可以使用one jQuery方法。
您可以通过两种方式执行此操作:
delegateEvents
方法this.$('textarea').one('click', _.bind(this. addSendCommentButton, this))