2013-10-11 30 views
2

我正在學習使用神奇的Bacon.js函數庫進行函數式響應式編程。添加處理程序的屬性或流很簡單:如何取消訂閱Bacon.js中的處理程序?

handler = function(value){... do something ...} 
property.onValue(handler) 

某處說下了線我想退租,這樣的(僞):

property.unsubscribe(handler) 

有沒有辦法一起做Bacon.js?

回答

3

從文檔的"cleaning up"部分:

調用由訂閱()調用返回的Dispose()函數。

所以你要保存的onValue返回:

var dispose = property.onValue(handler) 

然後調用它刪除監聽器:

dispose(); 

Here's a demo.

+0

謝謝麥格老鷹!我知道它必須在某個地方,但是對我而言,我看不到它。 :) – jpadvo

1

documentation

stream.subscribe(f)將給定的處理函數訂閱到事件流。函數將接收事件對象(見下文)。 subscribe()調用返回一個您可以調用取消訂閱的取消訂閱功能。您也可以通過從處理函數返回Bacon.noMore作爲對事件的回覆來取消訂閱。

11

上述兩個答案都是正確的。就我個人而言,我從來沒有使用任何解決方案。實際上,它們主要用於內部目的以及編寫自定義組合器和集成。

因此,我推薦像take,takeWhiletakeUntil這樣的組合器。在FRP應用程序中,觸發需求的信號通常可以建模爲EventStream。在這種情況下,你可以做

var data, stopper // EventStreams 
data.takeUntil(stopper).onValue(..) 
+0

很高興看到這樣的例子。 「塞爾」只是一個你用於控制流程的「總線」嗎? – pdoherty926

+3

呃,例如,如果您想對鼠標移動做出反應,並在按下某個鍵時停止該操作,您將執行'mouseMoves.takeUntil(keyPress).onValue(..)'。或者如果你只想做一次反應,你可以通過'clicks.take(1).onValue(..)'來實現。 – raimohanska

相關問題