【发布时间】:2015-08-02 08:52:19
【问题描述】:
处理冒泡事件包括在最顶部的元素上创建一个可观察的事件并过滤流,例如
let view,
formView;
formView = (count, query) =>
<form id='search-form'>
<input type='text' id='query' />
<div>count: {count}, query: {query}</div>
</form>;
view = () => {
let input,
count = 0;
input = Observable
.fromEvent(document, 'keyup')
.filter(e => e.target.id === 'query');
return input
.map((e) => {
return formView(++count, e.target.value);
})
.startWith(formView(0));
}
我不明白如何订阅不冒泡的事件,例如“重点”
input = Observable
// event 'focus' does not bubble to the document
.fromEvent(document, 'focus')
.filter(e => e.target.id === 'query');
我做不到:
input = Observable
.fromEvent(document.querySelector('#query'), 'focus')
[..]
因为在执行代码时,#query 元素不存在。
【问题讨论】:
-
您是否尝试在
window.onload处理程序中创建 Observable? -
@RetoAebersold 这不会改变任何事情,因为生成 DOM 的是 Rx 观察者。因此,在元素存在之前,它不能将绑定直接附加到元素。当然,除非有办法让
focus事件冒泡。