2016-12-15 198 views
0

我用於我的前端開發OpenUI5,它不支持rxjs。創建手動可觀察

例如,我想從OpenUI5事件監聽按下按鈕,不能做這樣

var source = Rx.Observable.fromEvent(input, 'press'); 

var subscription = source.subscribe(
    function (x) { 
    console.log('Next: Clicked!'); 
    }, 
    function (err) { 
    console.log('Error: %s', err); 
    }, 
    function() { 
    console.log('Completed'); 
    }); 

因爲按鈕控件不執行事件偵聽器。

所以我必須自己創建Observable,如何創建一個熱的Observable?

+0

你能否解釋一下你正在試圖完成什麼?對於將事件封裝在'fromEvent'中的事件是一種很好的方法(並且「訂閱」使它們變得很熱) –

+0

我想要達到的目的是用rxjs來處理新聞事件。 https://sapui5.netweaver.ondemand.com/docs/api/symbols/sap.m.Button.html#attachPress –

回答

0

如果fromEvent不爲你工作,或者比如你要多個事件絲,你可以做這樣的事情一樣流:

function mouseAllTheThingsStream(){ 
    const target = document.getElementById('#content'); 
    return Rx.Observable.create(observer => { 
    target.onmousemove(evt => observer.onNext(evt)); 
    target.onmousedown(evt => observer.onNext(evt)); 

    window.setTimeout(() => observer.onCompleted(), 30 * 1000); 

    return() => { 
     // cleanup; unsubscribe from events manually 
    } 
    }); 
} 
+0

'window.setTimeout(()=> observer.onCompleted(),30 * 1000);'什麼這是爲了什麼? –

+0

舉例說明您的自定義創建的可觀察者 –

+0

爲什麼我必須完成它? –