У меня есть выберите контроль, связанный с Knockout наблюдаемой массив:Как отменить изменение события на выбор управления с помощью нокаута?
<select data-bind="event: { change: selectedProductOfferingChange }, options: $parent.productTypes, optionsText: 'text', optionsCaption: '-- Select --', value: selectedProductType, enable: !isReadOnly()"></select>
Когда выбор меняется, я хочу, чтобы запустить код, возможно сделать вызов AJAX. Если изменение не разрешено, я хочу отменить изменение и отобразить модальное диалоговое окно. Я не могу подписаться на свойство, поскольку оно будет срабатывать после изменения. Мне нужно новое значение, чтобы определить, нужно ли отменять изменение или нет.
Я попытался следующие в ViewModel, но изменение не отменено, хотя свойство (selectedProductOffering) на ViewModel не обновляется:
self.selectedProductOfferingChange = function (data, event) {
event.stopImmediatePropagation();
return false;
};
Могу ли я использовать опцию «beforeChange» с подписки?
self.selectedProductType.subscribe(function (previous) {
}, self, "beforeChange");
Могут ли изменения быть отменены здесь?
Почти три года спустя это решило мою проблему - с незначительной настройкой. Мне нужно было добавить ko.computed (...). Extend ({notify: 'always'}), иначе мое выпадающее меню не вернется к исходному значению (Knockout v3.0.0) – Forty3