Триггер нокаута, вычисляемый наблюдаемым до расширения валидатора
У меня есть следующий сценарий - у меня есть свойство, которое имеет расширение, которое запускает валидатор. Это же свойство также является частью зависимой / вычисляемой наблюдаемой. Мне нужно, чтобы вычисляемая наблюдаемая была запущена до запуска расширения валидатора, потому что она обновляет некоторые значения, которые требуются валидатору. Однако валидатор всегда запускается первым.
В моей модели -
self.selected = ko.observable(false);
self.selected.extend({ checkVal: { viewModel: self } });
По моему вычислимым наблюдаемым -
self.mySelectedComputed = ko.computed({
read: function () {
if self.selected()...//I do some updates here
}
});
В моем валидаторе -
ko.validation.rules['checkVal'] = {
validator: function (val, parameter) {
var isSelected = parameter.viewModel.selected();
if (isSelected) {
//some other checks here based on the values updated by the computed observable
return false;
}
return true;
},
message: "Invalid.",
decorateInputElement: true
};
1 ответ
Похоже, вы злоупотребляете вычисляемыми наблюдаемыми. Я думаю, что нет никакого способа явно определить "порядок обновления" для вычисляемых наблюдаемых.
Если в вашем валидаторе вам нужна предварительная логика, возможно, вам будет проще просто запустить ее и не зависеть от побочных эффектов от наблюдаемых.
С другой стороны: возможно, эта "часть обновления", которую вы делаете в своем вычисляемом наблюдаемом коде, может быть выражена набором наблюдаемых, в этом случае нокаут будет обрабатывать всю цепочку зависимостей. Это обычный и "чистый" способ обработки зависимостей в модели представления.