Этот сценарий может применяться к целому ряду виджетов пользовательского интерфейса, но для простого примера я использую слайдер (например, слайдер jQuery UI).Магистраль с слайдером
У меня есть ползунок jQuery, который уведомляет Backbone.Model, когда он «скользит», а также когда он останавливается. Обновление обозревателя в обоих случаях. Я хочу добавить функциональность Undo/Redo, которая будет прослушивать изменения в Модели и создавать объекты Undo для каждого изменения, используя предыдущие() значения. Тем не менее, я хочу создавать объекты Undo, когда ползунок STOP, а не при каждом изменении во время скольжения.
Итак, мне нужен ползунок, чтобы уведомить модель изменений значения ползунка двумя разными способами, которые можно отличить с помощью кода отмены.
В настоящий момент я выполняю Model.trigger ('slideValue', [newValue]), когда вы сдвигаетесь, а Views воспроизводит и обновляет этот триггер. Затем, когда слайдер останавливается, я делаю Model.set ('slideValue', newValue), а функция Undo прослушивает эти события изменений для создания нового объекта Undo и добавления в очередь.
Причина, по которой я делаю Model.trigger ('slideValue', [newValue]), заключается в том, что это позволяет мне уведомлять обо всех Представлениях, которые Модель меняет (чтобы они могли визуализировать это изменение), но когда я прихожу для выполнения Model.set ('slideValue', newValue), когда слайдер останавливается, предыдущее() значение Модели доступно для моей функции Отменить (не было изменено во время разворота).
Но это все еще кажется ужасно взломанным. Есть ли более приятная альтернатива Model.trigger()?
Я не согласен с тем, что использование событий «ужасно взломан». Все мои приложения построены исключительно с основанной на событиями архитектурой. Это позволяет каждому виду быть полностью автономным, поскольку никакое представление никогда не будет непосредственно манипулировать другим видом. –