0

新しいコレクションを作成し、応答をフェッチして解析をオーバーライドすると、コレクション内に記録されたモデルの配列が表示されますが、フェッチが返された後はアクセスできません。メソッドで何かをfetch適切に指定していないからですか?

class MyCollection extends Backbone.Collection

      model: MyModel

      fetch: () ->

        $.ajax
          type: 'GET'
          url: '/customurl'
          success: (data) =>
            @parse data

      parse: (resp) ->

        if !resp
          return []

        things = []

        # parse that shit and things.push new MyModel()

        console.log 'things: ' + JSON.stringify things # this logs correctly

        things

window.myCollection = new MyCollection()
window.myCollection.fetch()

# wait some time, see it logged inside collection parse method...
console.log JSON.stringify window.myCollection # logs as []
4

1 に答える 1

0

async: falseオプションとしてfetchメソッドに渡してみてください。

window.myCollection.fetch({async: false})

結果が返されるconsole.logに呼び出されているため、に何も表示されていない可能性があります。結果が返された後にのみ呼び出されます。関数でカスタムロジックを実行し、フェッチが発生するたびに更新されたコレクションを使用してその関数を呼び出す方がよいでしょう。parsefoo()

window.myCollection.on("reset", foo)

次のような関数を定義できfoo(updatedCollection)、コレクションで何でもできます。このアプローチは、イベント駆動型のバックボーンの強調にもう少し近づいています。

また、補足として、コレクション内のプロパティとして指定するurl: '/customurl'限り、メソッドのオーバーライドを取り除くことができますfetch。バックボーンはデフォルトでを使用しGET、デフォルトで成功した結果をに送信しparseます。

ただの提案です。上記がうまくいくことを願っています。

于 2012-07-16T02:14:04.070 に答える