我有以下场景 - 我有一个属性,其中包含一个触发验证器的扩展名。相同的属性也是依赖/计算的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
};
答案 0 :(得分:0)
看起来你在滥用计算的观察者。我认为没有办法明确定义计算的observable的“更新顺序”。
如果在验证器中你需要应用一些初步逻辑,也许在那里运行它会更容易,并且不依赖于可观察的副作用。
另一方面:也许你在计算的可观察代码中做的这个“更新部分”可以用一组observable来表示,在这种情况下,knockout将处理整个依赖链。这是在视图模型中处理依赖关系的通常和“干净”方式。