Триггер нокаута, вычисляемый наблюдаемым до расширения валидатора

У меня есть следующий сценарий - у меня есть свойство, которое имеет расширение, которое запускает валидатор. Это же свойство также является частью зависимой / вычисляемой наблюдаемой. Мне нужно, чтобы вычисляемая наблюдаемая была запущена до запуска расширения валидатора, потому что она обновляет некоторые значения, которые требуются валидатору. Однако валидатор всегда запускается первым.

В моей модели -

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 ответ

Похоже, вы злоупотребляете вычисляемыми наблюдаемыми. Я думаю, что нет никакого способа явно определить "порядок обновления" для вычисляемых наблюдаемых.

Если в вашем валидаторе вам нужна предварительная логика, возможно, вам будет проще просто запустить ее и не зависеть от побочных эффектов от наблюдаемых.

С другой стороны: возможно, эта "часть обновления", которую вы делаете в своем вычисляемом наблюдаемом коде, может быть выражена набором наблюдаемых, в этом случае нокаут будет обрабатывать всю цепочку зависимостей. Это обычный и "чистый" способ обработки зависимостей в модели представления.

Другие вопросы по тегам