有没有一种方法可以扩展对敲除验证的validatedObservable的验证? [英] Is there a way to extend validation on Knockout Validation's validatedObservable?

查看:84
本文介绍了有没有一种方法可以扩展对敲除验证的validatedObservable的验证?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要确保每个可观测值都是有效的,并且还必须确保所有可观测值都有效.在我的简化示例中,我有一个分别需要的modelNumber和stockNumber,但它们也必须一起构成一个有效的partNumber.我的尝试给了我这个错误:

I need to make sure each observable is valid and also make sure all the observables are valid together. In my simplified example I have a modelNumber and stockNumber that are each required, but together they must also form a valid partNumber. My attempt gives me this error:

未捕获的错误:除非您指定'write'选项,否则无法将值写入ko.computed.如果希望读取当前值,请不要传递任何参数."

"Uncaught Error: Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters."

出什么问题了?

https://jsfiddle.net/yekr2ov2/18/

// enable validation
ko.validation.init();

ko.validation.rules['partNumberValid'] = {
  validator: function(partInfo, otherVal) {
    return partInfo.modelNumber() + partInfo.stockNumber() == "m1s1";
  },
  message: 'part number is invalid'
};
ko.validation.registerExtenders();

function VM() {
  var self = this;

  self.modelNumber = ko.observable().extend({ required: true });
  self.stockNumber = ko.observable().extend({ required: true });
  self.vinNumber   = ko.observable().extend({ required: true });

  self.isPartNumberValid = ko.validatedObservable({
    modelNumber: self.modelNumber,
    stockNumber: self.stockNumber,
    vinNumber: self.vinNumber
  }).extend({ partNumberValid: true });

  self.message = ko.observable();

  self.save = function() {
    if (self.isPartNumberValid.isValid()) {
      self.message("saved");
    } 
    else {
      debugger;
      //self.isPartNumberValid.errors.showAllMessages();
      self.message("not saved");
    }    
  };

}

ko.applyBindings(new VM());

推荐答案

我已经修改了代码,下面的代码可以正常工作.

i have modified the code and the following code works fine.

ko.validation.init();
ko.validation.rules['partNumberValid'] = {
 validator: function (partInfo, otherVal) {                           
              return partInfo.modelNumber() +''+ partInfo.stockNumber() === "m1s1";
            },
 message: 'part number is invalid'
           };
 ko.validation.registerExtenders();

 function VM() {
   var self = this;
   self.modelNumber = ko.observable().extend({required: true});
   self.stockNumber = ko.observable().extend({required: true});
   self.isPartNumberValid = ko.observable({                        
     modelNumber:self.modelNumber,
     stockNumber:self.stockNumber                                         
   }).extend({partNumberValid:true});

  self.validateMe = ko.computed(function(){
                        write:{
                            var tes = ko.validation.group([self.modelNumber,self.stockNumber,self.isPartNumberValid]);
                            tes.showAllMessages(true);
                        }
                    });
                }
  ko.applyBindings(new VM()); 

小提琴: https://jsfiddle.net/yekr2ov2/7/ 我使用ko.validation.group验证了可观察对象,并进行了计算以立即进行验证.您可以将计算按钮替换为单击按钮或任何其他自定义函数.让我知道是否有帮助.

Fiddle :https://jsfiddle.net/yekr2ov2/7/ i used ko.validation.group to validate observables and computed to validate immediately. you can replace the computed with button click or any other custom function. Let me know if that helps.

谢谢

这篇关于有没有一种方法可以扩展对敲除验证的validatedObservable的验证?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆