0

嗨,我创建了一个包含一组属性的函数对象。这就是我所拥有的:

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 应该被跳过

4

3 回答 3

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; }
}
于 2013-06-18T16:19:55.820 回答
1

WELL 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)
}
}
于 2013-06-18T16:02:27.487 回答
0

由于这个问题与淘汰验证库有关,我想我会展示如何使用库本身来做到这一点。

self.isValid = ko.computed(function () {
    return ko.validatedObservable(self).isValid()
});

有关更多信息,请参阅上面的链接。

于 2015-11-02T18:11:38.247 回答