10

Backbone の最新バージョン (1.0.0) には新しい動作があり、コレクションをフェッチした後、デフォルトでリセット イベントがトリガーされなくなりました。

http://backbonejs.org/#changelog

同様の model.set() との並列処理のために、コレクションの "update" の名前を set に変更し、reset とは対照的にしました。フェッチ後のデフォルトの更新メカニズムになりました。「reset」を引き続き使用する場合は、{reset: true} を渡します。

問題は、コレクションが最終的にフェッチされたときにイベントをキャプチャしたいことです (実際、かなり一般的なケースです!)

イベントの追加、削除、変更を聞くことができましたが、コレクションが空の場合、イベントをキャッチする方法がわかりません。

では、コレクション リクエストが終了したときにキャッチするための新しい推奨される方法は何でしょうか。それとも、それを達成する唯一の方法は { reset = true } を渡すことですか?

ps: これが元の質問です。ところで、バックボーン コレクションのリセット イベントをキャッチできません。

4

4 に答える 4

10

コレクションを呼び出すときにメソッドを成功ハンドラーとして渡すことができfetchます。あなたが言ったように、すべて[追加、削除、更新、またはリセット]が発生したときに何かをしたいだけで、この成功ハンドラー内で実行できます。

collection.fetch({
  success: function() {
    // Do Something
    // This is called when all add, remove and update operations have been done
  }
});

注:成功ハンドラーは、合格したかどうかに関係なく常に実行されますreset:true。コレクションが空になるかどうかに関係なく、すべての追加、削除、および更新イベントが発生したときに、最後のステップで呼び出されます。

問題が解決しない場合はお知らせください。

于 2013-05-14T16:38:57.400 に答える
0

promise を使用して...

// you could use promises as well
// P.S.: pardon jquery promises :)

var C = Backbone.Collection.extend({
    url: '/echo/json/'
});

var c = new C();

// c.fetch() returns jqXHR object that you can listen too
$.when( c.fetch() )
   .done(successFn)
   .fail(failFn)
   .always(alwaysFn);
于 2015-01-07T00:44:35.810 に答える