0

複数の fetch() を同時に作成できるページ分割されたコレクションがあります。たとえば、ユーザーが「ページ 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 の成功コールバックが 2 回呼び出されます (つまり、全体で 3 回の 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への最初の呼び出しからのフェッチは->成功を返します:(coll、resp)=> @render()
  5. WHAMBAMRenderはAGAINと呼ばれます->ページがロードされていないので...
  6. フェッチは3回目と1ページ目で呼び出されます
  7. このあたりのどこかで、2ページ目の呼び出しが返されます

そして、問題はフェッチと描画を行うレンダリング関数によって引き起こされるため、イベントでこれを処理する必要があります。

于 2012-06-18T06:15:54.663 に答える