Knockout触发器在验证器扩展之前计算observable

时间:2014-08-31 17:43:30

标签: knockout.js validation computed-observable

我有以下场景 - 我有一个属性,其中包含一个触发验证器的扩展名。相同的属性也是依赖/计算的obsservable的一部分。我需要在验证器扩展触发之前先运行计算的observable,因为它会更新验证器所需的某些值。但是,验证程序始终首先触发。

在我的模特中 -

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 个答案:

答案 0 :(得分:0)

看起来你在滥用计算的观察者。我认为没有办法明确定义计算的observable的“更新顺序”。

如果在验证器中你需要应用一些初步逻辑,也许在那里运行它会更容易,并且不依赖于可观察的副作用。

另一方面:也许你在计算的可观察代码中做的这个“更新部分”可以用一组observable来表示,在这种情况下,knockout将处理整个依赖链。这是在视图模型中处理依赖关系的通常和“干净”方式。