我正在尝试基于另外两个创建新的 observable。我有:
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 observable,它应该在用户单击对象时产生值。我可以再次调用 findObject ,如下所示:
var objectClicked = this.mouseClickObservable.select(function (ev) {
return findObject(ev.clientX, clientY);
});
但这是非常耗时的功能。
我目前使用的另一种方法是将最后一个悬停的对象存储在一个变量中,但我认为应该有纯函数式的方法来做到这一点。我尝试像这样使用 Observable.join:
var objectClicked = this.objectUnderCursor.join(
mouseClickObservable,
function (obj) { return this.objectUnderCursor },
function (ev) { return Rx.Observable.empty() },
function (obj, ev) { return obj })
但它一键生成多个值