Knockout.js 在淘汰模型中只循环属性而不循环函数
我试图通过在测试中调用Knockout.js 在淘汰模型中只循环属性而不循环函数,knockout.js,bdd,jasmine,knockout-2.0,knockout-validation,Knockout.js,Bdd,Jasmine,Knockout 2.0,Knockout Validation,我试图通过在测试中调用self.isModelvalid手动验证我的模型,并假设我将返回true,因为在调用它之前,我为模型中的所有属性分配了测试值。以下是我在测试中的调用方式 listingViewModel = new ListingViewModel(); listingViewModel.country('a'); listingViewModel.city('a'); listingViewModel.cummunity(
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
我认为当它尝试验证isModelValid时会出现这个错误,因为isModelValid不是一个函数,而是它的属性
因此,如何只验证淘汰模型中的属性
感谢从技术上讲,
ko.可观察的
也是一种功能。因此,在您的例子中,ListingViewModel
的每个成员都是一个函数
您需要检查给定成员上是否存在isValid
属性
幸运的是,knockout validation插件有一个很好的实用功能来检查这一点,即:ko.validation.utils.isvalidable
因此,您需要修改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;
}
}
}
演示谢谢你救了我。非常感谢