这种情况可能适用于一大堆 UI 小部件,但对于一个简单的示例,我将使用一个滑块(例如 jQuery UI 滑块)。
我有一个 jQuery 滑块,它会在 Backbone.Model “滑动”和停止时通知它。在这两种情况下,视图都会更新。我想添加 Undo/Redo 功能来监听模型中的更改,并使用 previous() 值为每个更改创建 Undo 对象。但是,我只想在滑块停止时创建撤消对象,而不是在滑动期间的每次更改时创建。
因此,我需要滑块以两种不同的方式通知模型滑块值的更改,这两种方式可以通过撤消代码进行区分。
目前,我在滑动时执行 Model.trigger('slideValue', [newValue]) ,视图在此触发器上侦听和更新。然后当滑块停止时,我执行 Model.set('slideValue', newValue) 并且 Undo 功能监听这些更改事件以创建一个新的 Undo 对象并添加到队列中。
我在做 Model.trigger('slideValue', [newValue]) 的原因是这让我可以通知所有视图模型正在发生变化(这样他们就可以呈现这种变化),但是当我来做模型时。 set('slideValue', newValue) 当滑块停止时,模型的 previous() 值可用于我的撤消功能(在滑动期间未更改)。
但这仍然感觉非常糟糕。Model.trigger() 有更好的替代方案吗?