Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 扩展breeze js实体';属性导致无法跟踪更改_Javascript_Knockout.js_Breeze_Knockout Validation - Fatal编程技术网

Javascript 扩展breeze js实体';属性导致无法跟踪更改

Javascript 扩展breeze js实体';属性导致无法跟踪更改,javascript,knockout.js,breeze,knockout-validation,Javascript,Knockout.js,Breeze,Knockout Validation,我使用敲除验证来检查用户输入的某些字段是否有效。为此,我正在扩展breeze实体上的属性。以下是我的分机: var employeeInitializer = function (employee) { employee.FirstName = ko.observable().extend({ minLength: 2, required: true }); employee.LastName = ko.observable().extend({ minLen

我使用敲除验证来检查用户输入的某些字段是否有效。为此,我正在扩展breeze实体上的属性。以下是我的分机:

var employeeInitializer = function (employee) {


        employee.FirstName = ko.observable().extend({ minLength: 2, required: true });
        employee.LastName = ko.observable().extend({ minLength: 2, required: true });
        employee.TargetRate = ko.observable().extend({ min: 0, required: true });

        var validation = ko.validatedObservable({
            firstName: employee.FirstName,
            lastName: employee.LastName,
            targetRate: employee.TargetRate
        });

        employee.isValid = ko.computed(function () { return validation.isValid() });
}
manager.metadataStore.registerEntityTypeCtor("Employee", null, employeeInitializer);
现在,当我对这三个字段中的任何一个进行更改时,都不会跟踪更改。如果用户正在编辑员工,但决定取消他们的编辑,那么我应该能够在视图模型中调用下面的行

self.employee.entityAspect.rejectChanges();

但是,entityAspect没有跟踪任何更改,即使应该有。如果我从属性中删除扩展,那么一切都可以正常工作。知道为什么会发生这种情况吗?

我想不出一个好的理由对Breeze实体使用KO验证。Breeze实体已经将验证合并为一个组件。您还可以在中了解它

我对KO验证的了解还不够,无法解释你们用KO验证扩展观测值是如何打破变化跟踪的。如果非要我猜的话,我猜扩展的行为会用Breeze不知道的新的可观察物取代原来的可观察物。因此,这些新观测值的变化不会传播到位于每个实体中心的存储库中;从实体的角度来看,没有任何变化

我不是说这是真正的解释。我建议这是一种可能性。。。您可以通过比较扩展前后由
employee.FirstName
返回的可观察属性来验证。我猜他们不一样

不管是真是假,我鼓励您放弃KO验证,转而支持Breeze原生验证

我们欢迎您思考KO验证为您所做的事情,而Breeze验证并非如此

我有些怀疑,但我想听听你要说什么


谢谢你的意见。我继续前进,使用已经存在的微风验证。