Javascript RxJS侦听事件,但稍后附加事件侦听器

Javascript RxJS侦听事件,但稍后附加事件侦听器,javascript,events,rxjs,Javascript,Events,Rxjs,有了RxJS,我想订阅事件。问题是:我想在设置事件侦听器之前设置Observable 将其想象为两个按钮:Button1在单击时执行某些操作,但仅在button2将事件侦听器附加到Button1之后。观察者应该订阅button1的点击事件。所有这些都应该在应用程序启动时连接在一起。按钮2不应该设置观察者!一些没有RxJS的代码: button2.addEventListener('click', function() { // [...] some code to prevent tha

有了RxJS,我想订阅事件。问题是:我想在设置事件侦听器之前设置Observable

将其想象为两个按钮:Button1在单击时执行某些操作,但仅在button2将事件侦听器附加到Button1之后。观察者应该订阅button1的点击事件。所有这些都应该在应用程序启动时连接在一起。按钮2不应该设置观察者!一些没有RxJS的代码:

button2.addEventListener('click', function() {
    // [...] some code to prevent that button1 has more than one event listener

    // attach event listener to button1
    button1.addEventListener('click', clickHandler);

    // now let observer subscribe itself to clickHandler somehow
    // -> HOW?
});


function clickHandler() {
    console.log("clicked");
}
编辑:也许,有可能观察到某种虚拟事件处理程序,它从不发出任何东西,但在单击按钮2或类似的东西后变成真正的事件处理程序(
clickHandler

Edit2:我注意到这两个按钮并不是最好的例子。让我们改变一下,让button2的事件监听器通过一些未知的机制连接起来。例如:

// is called by unkown means, i. e. the observer doesn't know how and when its attached
function attach() {
    button1.addEventListener('click', clickHandler);
}

但是当调用
attach()
时,观察者应该订阅
clickHandler
。或者,观察者可能一直订阅某个函数,
attach()
将该函数与实际的事件侦听器交换。不知道。

据我所知,你想要创建一个可观测的物体,它会在物体上发射一个物体 每次单击
按钮1
,但仅在一段时间之前单击
按钮2
之后

那么这应该是可行的:
var button1=document.querySelector('#button1');
var button2=document.querySelector(“#button2”);
var onButton2Click$=Rx.Observable.fromEvent(button2,'click')。取(1);
var onButton1Click$=Rx.Observable.fromEvent(button1,'click').skipUntil(onButton2Click$);
OnButton1单击$.subscribe(函数(事件){
console.log('单击按钮1')
});

按钮1

按钮2
感谢您抽出时间回答。如果事件监听器不是通过button2连接的,而是通过其他方式连接的,您会怎么做?如果没有
take(1)
skipUntil()?请参阅我问题中的Edit2。我添加了关于编辑的第二个示例,使用
主题来“附加”侦听器。你不需要一个按钮,它只是用来测试这个例子。为什么没有
skipUntil
?如果您想使用RxJs,那么应该使用它的方法。