Как показано ниже, почему пример 1 терпит неудачу, когда мы возвращаем div, а затем отдельно возвращаем новое наблюдаемое по клику flatMap в click$
?
Пример 2 работает нормально. JSBin ниже, чтобы попробовать
Кто-нибудь может объяснить, почему это происходит? Насколько я понимаю, flatMap расширяет Observable. http://jsbin.com/sowodi/3/edit?js,console,output
// Example 1
() => {
let stream = Rx.Observable.fromArray([1, 2, 3]);
let div$ = stream.map(i => {
let div = document.createElement('div');
div.innerHTML = `NOT WORKING DIV ${i}`;
return div;
})
div$.subscribe(div => {
document.querySelector('body').appendChild(div);
})
let click$ = div$.flatMap(
div => Rx.Observable.fromEvent(div, 'click')
);
click$.subscribe(click => console.log('click'));
}();
// Example 2
() => {
let stream = Rx.Observable.fromArray([4, 5, 6]);
let click$ = stream.flatMap(i => {
let div = document.createElement('div');
div.innerHTML = `DIV ${i}`;
document.querySelector('body').appendChild(div);
return Rx.Observable.fromEvent(div, 'click');
})
click$.subscribe(click => console.log('click'));
}();
<!DOCTYPE html>
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/4.0.6/rx.all.js"></script>
<meta charset="utf-8">
<title>JS Bin</title>
</head>
<body>
<div id="app">
THE APP ID
</div>
</body>
</html>
onClick
перед добавлением в DOM - person FeliciousX   schedule 05.02.2016