0
我試圖根據另外兩個對象創建新的可觀察對象。我有:在RX.js中加入兩個可觀察對象
var mouseClickObservable = Rx.Observable.fromEvent(this.canvas, "click");
var mouseMoveObservable = Rx.Observable.fromEvent(this.canvas, "mousemove");
function findObject(x, y) {/* logic for finding object under cursor here. */}
var objectUnderCursor = this.mouseMoveObservable.select(function (ev) {
return findObject(ev.clientX, clientY);
});
我想創建objectClicked觀察到,當用戶點擊一個對象應該產生價值。我可以再次調用findObject,像這樣:
var objectClicked = this.mouseClickObservable.select(function (ev) {
return findObject(ev.clientX, clientY);
});
但它是非常耗時的功能。
我目前使用的另一種方法是將最後一個懸停的對象存儲在一個變量中,但我認爲應該有這樣做的純粹的功能方式。我tryed使用Observable.join這樣的:
var objectClicked = this.objectUnderCursor.join(
mouseClickObservable,
function (obj) { return this.objectUnderCursor },
function (ev) { return Rx.Observable.empty() },
function (obj, ev) { return obj })
但它點擊
是的,我需要知道什麼鼠標懸停,和你最後的解決方案是非常有益的,但觀察到由'.selectMany創建(函數(){返回this.objectUnderCursor ;})'當鼠標在點擊後移動時,'會繼續產生值。我將它改爲'.selectMany(function(){return this.objectUnderCursor.first();})',它完美地工作。非常感謝! –