使用Paginated Backbone集合同时获取

时间:2012-06-18 04:33:28

标签: javascript jquery backbone.js coffeescript

我有一个可以同时进行多个fetch()es的分页集合。例如。用户可以点击“第1页”,看到“正在加载...”消息,然后在第1页加载之前单击“第2页”,这将触发另一个fetch()请求(显然向下发送不同的页面参数)。希望这是有道理的。我在View(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()

似乎工作......

1 个答案:

答案 0 :(得分:2)

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

  1. 称为渲染 - &gt;第1页的获取被触发
  2. 用户点击第2页
  3. 称为渲染 - &gt;触发第2页的提取
  4. 从第一次调用到第1页的提取返回 - &gt;成功:( coll,resp)=&gt; @render()
  5. WHAM BAM Render被称为AGAIN - &gt;页面尚未加载...
  6. 第三次调用Fetch,第一次调用
  7. 在这附近,第2页的调用返回
  8. 你肯定应该用事件处理这个问题,因为问题是由你的渲染函数进行提取和绘图引起的。