0

我有一个分页集合,可以同时进行多个 fetch()es。例如,用户可以单击“第 1 页”看到“正在加载...”消息,然后在第 1 页加载之前单击“第 2 页”,这将触发另一个 fetch() 请求(显然发送不同的页面参数)。希望这是有道理的。我在一个视图(Coffeescript)中处理这个:

render: ->
  if @collection.hasPage()
    # render the view
  else
    el.append '<h3>Loading...</h3>'

    @collection.fetch
      success: (coll, resp) => @render()

但是,如果我单击第 1 页,然后在第 1 页加载之前单击第 2 页,则第 1 页的成功回调最终会被调用两次(因此总共调用了三个 success())。success() 回调按以下顺序调用:第 1 页、第 2 页、第 1 页

为什么会这样?我应该用事件处理这个吗?我不应该同时允许多个 fetch()es 吗?谢谢您的帮助。

更新

这就是我现在的做法:

initialize: ->
  @page = @collection.page

render: ->
  if @collection.hasPage(@page)
    #render
  else
    el.append 'Loading...'

    @collection.fetch
       success: (coll,resp) =>
         # do some stuff with coll
         if @page == @collection.page
           @render()

似乎工作...

4

1 回答 1

2

这就是它发生的原因(至少根据我的逻辑):

  1. 调用渲染 -> 触发第 1 页的提取
  2. 用户点击页面 2
  3. 调用渲染 -> 触发第 2 页的提取
  4. 从第一次调用到第 1 页的 fetch 返回 -> 成功: (coll, resp) => @render()
  5. WHAM BAM Render 再次调用 -> 页面尚未加载,所以...
  6. 第 3 次和第 1 页调用 Fetch
  7. 在这里的某个地方,第 2 页的调用返回

而且你绝对应该用事件来处理这个问题,因为问题是由你的渲染函数进行获取和绘图引起的。

于 2012-06-18T06:15:54.663 回答