您好我创建了一个包含一组属性的函数对象。这就是我所拥有的:
function LoginModelDTO(data) {
var self = this;
self.UserName = ko.observable(data.UserName).extend({
minLength: {
params: 25,
message: "Username should have at least 25 chars"
},
required: {
message: "Username is required"
},
maxLength: {
params: 50,
message: "Username should not have more then 50 chars"
},
trackChanges: null
});
self.Password = ko.observable(data.Password).extend({
stringLength: {
params: 25,
},
required: {
message: "Password is required"
},
trackChanges: null
});
self.RememberMe = ko.observable(data.RememberMe).extend({
trackChanges: null
});
self.isValid = ko.computed(function () {
var bool = self.FirstName.isValid() &&
self.Username.isValid() &&
self.Password.isValid() &&
self.RememberMe() &&
return bool;
});
}
我想要的是能够找到一种迭代每个属性的方法,并且每次都不写每个属性就会问它是否有效,因为我还必须为hasChanges,revertChanges等编写类似self.isValid的类似结构。
此外,我需要为LoginModelDTO创建其他类似对象,这些对象具有大约30-35个属性。这将导致大量代码和更大的javascript文件。
我有什么方法可以迭代只抛出属性并检查它们是否有效?应跳过isValid
答案 0 :(得分:1)
for..in 声明可以帮助您:
var obj = {
pro1:"hello",
pro2:function(){
//code here
},
etc:function(){
}//...
}
for(var property in obj)
{
if(obj.hasOwnProperty(property))
{
console.log(property)//display the name of the property and of course the access
}
}
要访问该属性的值,您可以执行以下操作:
for(var property in obj)
{
if(obj.hasOwnProperty(property))
{
console.log(obj[property])//display the value of the property(in case that you need it)
}
}
答案 1 :(得分:1)
eis在评论中给了你一部分,Misters给了你答案的一部分,但是这一切都在一起:
var allValidatablesAreValid = true;
for (var property in self)
{
if (self.hasOwnProperty(property) && self[property]["isValid"]) {
allValidatablesAreValid = allValidatablesAreValid && self[property].isValid();
}
// You can add an early bail out here:
// if (!allValidatablesAreValid) { break; }
}
答案 2 :(得分:0)
由于这个问题与knockout-validation库有关,我想我会用库本身来说明如何做到这一点。
self.isValid = ko.computed(function () {
return ko.validatedObservable(self).isValid()
});
有关详细信息,请参阅上述链接。