Knockout.js 在验证器扩展之前计算出的可观察的敲除触发器

Knockout.js 在验证器扩展之前计算出的可观察的敲除触发器,knockout.js,validation,computed-observable,Knockout.js,Validation,Computed Observable,我有以下场景-我有一个属性,它有一个触发验证器的扩展。相同的属性也是从属/计算的可观测属性的一部分。我需要在验证器扩展触发之前首先运行computed observable,因为它会更新验证器所需的一些值。但是,验证程序总是首先触发 在我的模型中- self.selected = ko.observable(false); self.selected.extend({ checkVal: { viewModel: self } }); 在我的计算可观察- self.mySelectedComp

我有以下场景-我有一个属性,它有一个触发验证器的扩展。相同的属性也是从属/计算的可观测属性的一部分。我需要在验证器扩展触发之前首先运行computed 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
};

看起来您正在滥用计算的可观测值。我认为没有办法明确定义计算的可观测数据的更新顺序

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


另一方面:也许您在计算的可观测代码中所做的更新部分可以用一组可观测值来表示,在这种情况下,knockout将处理整个依赖链。这是处理视图模型中依赖关系的常用且干净的方法。

所有值是否都由计算的可观测值更新?如果是,则在更新任何值时应调用验证器。验证器的行为本质上类似于计算机。请看一个例子谢谢!不,只更新了2个值。如果计算的可观察对象位于父级,该怎么办?当选择的任何一个子对象发生变化时,它需要触发?你能更新你的示例来显示所有其他更新的值吗?正如Artur所提到的,一个示例应用程序用类似JSFIDLE或jsBin的东西来演示这个问题。这真的帮助了我们,我真的想避免在验证器中执行更新逻辑。我有两个观测值,当选择更改时需要更新。这就是为什么我创建了一个依赖/计算的可观察对象。我怎么才能做到这一点呢?现在你用不同的方式陈述了你的问题。您能提供关于JSFIDLE的最小示例吗?我相信我们可以解决你的问题,但你在问题中遗漏的细节可能是至关重要的。