0

我试图通过调用self.isModelvalid我的测试并假设我会返回来手动验证我的模型true,因为在调用它之前,我将测试值分配给了我的模型中的所有属性。这是我在测试中的调用方式

        listingViewModel = new ListingViewModel();
        listingViewModel.country('a');
        listingViewModel.city('a');
        listingViewModel.cummunity('a');
        listingViewModel.subCummunity('a');
        listingViewModel.postCode('1');        
        expect(listingViewModel.isModelValid()).toBe(true);

这是我的源类,其中存在我的模型和所有方法:

        function validateModel(model) {
      var self = model;
       for (var prop in self) {
       if (self.hasOwnProperty(prop)) {
         if (!(self[prop].isValid())) {
            return false;
          }
       }
    }

   return true;

 }

   function ListingViewModel() {
   var self = this;
    self.country = ko.observable('').extend({required : true});
   self.city = ko.observable('').extend({ required: true });
  self.cummunity = ko.observable('').extend({ required: true });
   self.subCummunity = ko.observable('').extend({ required: true });
    self.postCode = ko.observable('').extend({ required: true });

    self.isModelValid = function () {

      validateModel(self);

    };

   self.addListing = function () {

    };
   }


    ko.validation.configure({
   decorateElement: false,
   errorElementClass: "error",   // class name
   insertMessages: false,
   grouping: { deep: true, observable: true }
  });

当我运行时它说

listingViewModel.isModelValid() TypeError: self[prop].isValid is not a function

我认为当它validateModel尝试验证isModelValid并且失败时会发生此错误,因为isModelValid它不是其属性的函数。

那么如何仅验证淘汰模型中的属性。

谢谢

4

1 回答 1

1

从技术上讲,这ko.observable也是一个功能。所以在你的情况下,每个成员ListingViewModel都是一个函数。

您需要检查isValid给定成员上是否存在该属性。

幸运的是,淘汰赛验证插件有一个很好的实用功能来检查这一点,即:ko.validation.utils.isValidatable.

因此,您需要使用上述功能修改您validateModel的属性以检查是否存在:isValid

 function validateModel(model) {
      var self = model;
       for (var prop in self) {
       if (self.hasOwnProperty(prop)) {
         if (ko.validation.utils.isValidatable(self[prop]) 
             && !(self[prop].isValid())) {
            return false;
          }
       }
    }

演示JSFiddle。

于 2013-06-10T07:56:54.460 回答