我通过 ajax 调用加载了一组项目 - 这是我的初始 DOM:
<section class="books">
</section>
通过 AJAX 调用,我从服务器加载了一些书籍,以 JSON 形式返回,以创建以下 DOM 结构:
<section class="books">
<section class="book">
..
</section>
<section class"book">
..
</section>
# and so on
</section>
这就是我执行 AJAX 调用的方式:
buttonClickStream = Rx.Observable.fromEvent queryButton, 'click'
requestStream = buttonClickStream
.map ->
bookName = $('#query').val()
"/books/list?book=#{bookName}"
responseStream = requestStream
.flatMap (requestUrl) ->
disableForm()
Rx.Observable.fromPromise $.getJSON(requestUrl)
通过订阅responseStream
(并将 JSON 响应转换为 HTML),我将其添加到 DOM 中,如下所示:
booksHTMLStream = responseStream
.map (json) ->
_.map(json.books, (book) -> bookTemplate(book))
bookHTMLStream.subscribe(
(html) ->
booksContainer.html(html)
)
现在,我要做的是附加一个用于点击<section class="book">
元素的流,这些元素已在从booksHTMLStream
. 我知道我可以在块中添加它,但这subscribe
让我想起了回调汤——我觉得我做事的方式不对。
我最初无法添加蒸汽,因为<section class="book">
页面加载时没有元素,因此流永远不会触发任何值。所以,我想知道是否可以将源异步添加到流中,或者是否有任何好的方法来完成我想要的,而不会变成混乱的回调式情况?
干杯:-)