3

バックボーンコレクションでcollection.fetch({add:true})を呼び出した後、更新されたコレクションのビューのレンダリングが終了したら、イベントをトリガーしたいと思います。

コレクションビュー」には「add」メソッドがあり、コレクション内の新しいアイテムごとに「アイテムビュー」を生成し、そのビューで「render」を呼び出して、コレクションビューに追加します。

コレクションのフェッチが終了し、すべてのアイテムが追加およびレンダリングされたときにイベントをトリガーする方法はありますか?

4

2 に答える 2

5

fetchコレクションのメソッドはパラメーターを取りsuccessます:

フェッチ collection.fetch([options])

[...]引数としてそれぞれ渡されるオプションハッシュsuccesserrorコールバック(コレクション、応答、オプション)と(コレクション、xhr、オプション)。

successコールバックは、コレクションが更新された後に呼び出されるためすべてのイベントがトリガーされて処理された後に呼び出されます。"add"だからあなたはこれを行うことができます:

collection.fetch({
    success: function(collection, response, options) {
        collection.trigger('fetched_and_notified');
    }
});

そして、気になる人なら誰でもそのcollection.on('fetched_and_notified', ...)ようなイベントを聞くことができます。fetch必要に応じて、次のように、このイベントを自動的にトリガーする独自の実装を提供できます。

fetch: function(options) {
    options = options ? _.clone(options) : { };

    var success     = options.success;
    options.success = function(collection, response, options) {
        collection.trigger('fetched_and_notified', collection);
        if(success)
            success(collection, response, options);
    };
    Backbone.Collection.prototype.fetch.call(this, options);
}
于 2012-11-28T21:32:42.083 に答える
1

Backbone.Eventsを使用して、アプリケーションに基づいていつでも、あらゆる種類のオブジェクトでカスタムイベントをトリガーできます。

ビューのレンダリング後にイベントをトリガーするには、次のようにします。

var MyView = Backbone.View.extend({

  initialize: function() {
     _.bindAll(this);
  },  

  render: function() {
     //Do all the rendering

     this.trigger('myEvent');
  }
});

this.trigger('myEvent')は、トリックを実行する行です。

于 2012-11-28T14:12:29.023 に答える