【发布时间】:2014-01-16 07:30:00
【问题描述】:
这种情况可能适用于一大堆 UI 小部件,但对于一个简单的示例,我将使用滑块(例如 jQuery UI 滑块)。
我有一个 jQuery 滑块,它会在 Backbone.Model “滑动”和停止时通知它。在这两种情况下,视图都会更新。 我想添加 Undo/Redo 功能来监听模型中的更改,并使用 previous() 值为每个更改创建 Undo 对象。但是,我只想在滑块停止时创建 Undo 对象,而不是在滑动期间的每次更改时创建。
因此,我需要滑块以两种不同的方式通知模型滑块值的更改,这两种方式可以通过撤消代码进行区分。
目前,我在滑动时执行 Model.trigger('slideValue', [newValue]) 并且视图在此触发器上侦听和更新。 然后当滑块停止时,我执行 Model.set('slideValue', newValue) 并且 Undo 功能会监听这些更改事件以创建一个新的 Undo 对象并添加到队列中。
我这样做的原因是 Model.trigger('slideValue', [newValue]) 是这样我可以通知所有视图模型正在发生变化(这样他们就可以呈现这种变化),但是当我来到当滑块停止时执行 Model.set('slideValue', newValue),模型的 previous() 值可用于我的 Undo 功能(在滑动过程中未更改)。
但这仍然让人觉得被黑客入侵了。有没有比 Model.trigger() 更好的替代方法?
【问题讨论】:
-
我不同意使用事件是“骇人听闻的黑客行为”。我所有的应用程序都是专门使用基于事件的架构构建的。它允许每个视图完全独立,因为任何视图都不会直接操作另一个视图。
标签: backbone.js