-1

我有问题要解除绑定一个监听共享发射器之一的监听器:

// 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 继续工作?

4

2 回答 2

1

保存对处理程序的引用,以便以后unbind可以使用:

var listener = function(e, object) {
    if (object.anotherParam) {
        ....
    }
};


$(document).bind("a.b.c", listener);

// sometime later:
$(document).unbind("a.b.c", listener);
于 2012-10-11T08:42:00.497 回答
0

我找到了更好的解决方案命名空间事件

// 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

于 2012-10-11T08:49:18.150 回答