このシナリオは多くの UI ウィジェットに適用できますが、簡単な例として、スライダー (jQuery UI スライダーなど) を使用します。
Backbone.Model が「スライド」したときと停止したときに通知する jQuery スライダーがあります。ビューはどちらの場合も更新されます。モデルの変更をリッスンする Undo/Redo 機能を追加し、previous() 値を使用して変更ごとに Undo オブジェクトを作成したいと考えています。ただし、スライド中のすべての変更ではなく、スライダーが停止したときに Undo オブジェクトを作成したいだけです。
そのため、元に戻すコードで区別できる 2 つの異なる方法で、スライダー値の変更をモデルに通知するスライダーが必要です。
現時点では、スライド中に Model.trigger('slideValue', [newValue]) を実行しており、ビューはこのトリガーをリッスンして更新します。次に、スライダーが停止したら、Model.set('slideValue', newValue) を実行します。元に戻す機能は、これらの変更イベントをリッスンして、新しい元に戻すオブジェクトを作成し、キューに追加します。
私が Model.trigger('slideValue', [newValue]) を実行している理由は、これにより、モデルが変更されていることをすべてのビューに通知できるためです (したがって、この変更をレンダリングできます)。 set('slideValue', newValue) スライダーが停止すると、元に戻す機能でモデルの previous() 値を使用できます (スライド中に変更されていません)。
しかし、これはまだひどくハッキングされているように感じます. Model.trigger() に代わるより良い方法はありますか?