我有一个问题是取消绑定一个侦听共享发射器的侦听器:
// this is emitter. Fire always in a.b.c namespace but with different parameters
$(document).trigger("a.b.c", {
p: 1,
p2: ...
});
// listener 1
$(document).bind("a.b.c", function(e, object) {
if (object.myParam) {
....
}
});
// listener 2
$(document).bind("a.b.c", function(e, object) {
if (object.anotherParam) {
....
}
});
如何解除侦听器2的绑定,让侦听器1继续工作?
答案 0 :(得分:1)
保存对处理程序的引用,以便稍后unbind
:
var listener = function(e, object) {
if (object.anotherParam) {
....
}
};
$(document).bind("a.b.c", listener);
// sometime later:
$(document).unbind("a.b.c", listener);
答案 1 :(得分:0)
我找到了更好的解决方案Namespaced Events
// this is emitter. Fire always in a.b.c namespace but with different parameters
$(document).trigger("a.b.c", {
p: 1,
p2: ...
});
// listener 1
$(document).bind("a.b.c.listener1", function(e, object) {
if (object.myParam) {
....
}
});
// listener 2
$(document).bind("a.b.c.listener2", function(e, object) {
if (object.anotherParam) {
....
}
});
现在触发a.b.c
会触发listener1
和listener2
。
解开 - 只与特定的听众解除绑定,例如:
$(document).unbind("a.b.c.listener1");
在这种情况下,listener2
将被保留,并且可以通过名称空间a.b.c