5

簡単な質問:イベントを「一度だけ」起動する最良の方法は何ですか?

バックボーンに複数のモデルを持つコレクションがあります。複数のモデルの属性が一度に更新され、コレクションで複数の「変更」イベントが発生することがあります。

「変更」イベントを 1 回だけ発生させ、すべての属性の変更をグループ化する最良の方法は何ですか?

現時点での私の最善のアイデアはタイマーを使用することですが、これは最初のモデル属性の変更のみをキャプチャします。

すべての提案、アイデア、解決策は高く評価されています。ありがとうございました :)。


コンテキスト: この場合、イベントは非常に計算集約的な関数を起動するため、複数回の実行は避ける必要があります。

4

3 に答える 3

3

変更イベントに応答するコレクション内のメソッドを「デバウンス」できますが、どのモデルが変更されたかを手動で把握する必要があります。

Col = Backbone.Collection.extend({
    modelChanged: _.debounce(function() {
        // handle model changes
    }, delayInMs),
    initialize: function() {
        this.collection.on('change', this.modelChanged, this);
    } 
})
于 2013-08-09T16:45:45.107 に答える
2

要素を追加するのではなく、コレクションをリセットしてみてください。コレクションのリセット方法の説明を参照してください。

リセット collection.reset([models], [options])

一度に 1 つずつモデルを追加したり削除したりするのは良いことですが、変更するモデルが非常に多く、コレクションをまとめて更新したい場合があります。リセットを使用してコレクションをモデル (または属性ハッシュ) の新しいリストに置き換え、最後に単一の「リセット」イベントをトリガーします。新しく設定されたモデルを返します。便宜上、「リセット」イベント内で、以前のモデルのリストを options.previousModels として利用できます。

ドキュメントにあるように、 を使用するresetと、代わりに最終的にadd単一のresetイベントが取得されます。

于 2014-01-05T16:47:34.933 に答える