У меня есть флажок, который ранее был привязан непосредственно к наблюдаемому свойству в моей модели представления. Я использую общий грязный флаг во всех моделях просмотра, который отслеживает все наблюдаемые свойства в модели представления для изменений.Knockout.js записываемый вычисляемый логический наблюдаемый привязан к флажку - недопустимая настройка свойства
Теперь для одного объекта недвижимости я хотел бы представить предупреждение, если пользователь попытается снять флажок перед, не снимая базовый наблюдаемый. Я пытался реализовать это как записываемая вычисленные наблюдаемыми, который оборачивает наблюдаемую как так:
function VM() {
var self = this;
self.SelectedInternal = ko.observable(false);
self.selected= ko.computed({
read: function() {
return self.SelectedInternal();
},
write: function (value) {
alert('Clicked'); // To demonstrate problem
if (value === false) {
if (confirm('Are you sure you wish to deselect this option?')) {
self.SelectedInternal(value);
}
}
}
});
}
var vm = new VM();
ko.applyBindings(vm);
Что я вижу (как в Firefox и IE) является то, что, когда я по умолчанию наблюдаемого значения SelectedInternal к ложному, как описан выше , то «выбранная» функция записи срабатывает только каждый раз, когда я устанавливаю флажок, а не когда снимаю его. Если я по умолчанию значение SelectedInternal для наблюдаемого значения равно true, то при первом отключении его выполняется установка записи, но не последующие отмены.
Вот скрипку, чтобы продемонстрировать:
Что здесь происходит? Есть ли лучший способ достичь этого?
UPDATE: Этот подход, вероятно, не сработает, потому что я не могу получить крючок в исходный щелчок, чтобы вернуть значение false, и сбросить наблюдаемое на true, если пользователь выбрал Отменить в поле подтверждения. t, похоже, вступает в силу. Но мне все же хотелось бы знать, почему сам вычислительный сеттер не ведет себя так, как ожидалось.
Спасибо, но не могли бы вы раскошелиться на эту скрипку, чтобы продемонстрировать, как вы могли бы получить подтверждение с помощью этой техники? Я экспериментировал с отдельным связыванием кликов, а также с проверенным связыванием, но я еще не смог его исправить. –
Спасибо, но это не касается моего сценария. У меня есть только один флажок, и когда этот флажок снят, я хочу получить подтверждение, прежде чем изменять базовый наблюдаемый. –
См. Мой ответ. Я открыт для чего-нибудь приятного :-) –