2012-10-11 20 views
-1

我有問題要取消綁定一個聽衆,聽共享發射器之一:jQuery的解除綁定監聽

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

你怎麼去那種情況下調用。你的設計必須有設計缺陷 –

+0

你能解釋爲什麼它有缺陷嗎?我需要相同的命名空間,但具有不同的數據。 –

回答

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) { 
     .... 
    } 
}); 

現在trigging a.b.c將與listener1listener2觸發。 並解除綁定 - 只有與特定的聽衆解除綁定,如:

$(document).unbind("a.b.c.listener1"); 

在這種情況下listener2將被保留,並能夠通過命名空間a.b.c

1

保存參照處理程序,以便以後可以unbind它:

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


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

// sometime later: 
$(document).unbind("a.b.c", listener); 
+0

謝謝,看起來像在文檔中錯過了 –