1

我有以下场景 - 我有一个属性,它有一个触发验证器的扩展。同样的属性也是依赖/计算 observable 的一部分。我需要在验证器扩展触发之前首先运行计算的 observable,因为它更新了验证器所需的一些值。但是,验证器总是首先触发。

在我的模型中 -

self.selected = ko.observable(false);
self.selected.extend({ checkVal: { viewModel: self } });

在我计算出的 observable 中——

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
};
4

1 回答 1

0

看起来您正在滥用计算的 observables。我认为没有办法为计算的 observables 明确定义“更新顺序”。

如果在您的验证器中您需要应用一些初步逻辑,那么在此处运行它可能会更容易,并且不依赖于 observable 的副作用。

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

于 2014-08-31T20:42:42.940 回答