淘汰赛验证&命名空间

时间:2012-12-05 13:07:05

标签: javascript validation binding knockout.js javascript-namespaces

我在将命名空间与淘汰赛验证相结合时遇到了麻烦。这打破了验证:

myNameSpace = {
    viewModel: {
        name: ko.observable().extend({ digit: { digit: true, message: "digits only"} })
    }
};
ko.validation.init({});
ko.applyBindings(myNameSpace);

相反:

myNameSpace = {
    viewModel: {
        name: ko.observable().extend({ digit: { digit: true, message: "digits only"} })
    }
};
ko.validation.init({});
ko.applyBindings(myNameSpace.viewModel);

哪种方法正常。

有人可以向我解释一下这个区别吗?     

1 个答案:

答案 0 :(得分:0)

这是关于对象和属性的存在。您可能已经绑定了“name”属性。如果你执行ko.applyBindings(myNameSpace);, ko在myNameSpace对象中查找属性“name”。这不存在。

使用ko.applyBindings(myNameSpace.viewModel);绑定它时,它会在视图模型对象中查找名称。它确实找到它并且因此能够绑定到属性或可观察的。

然而,在第一种情况下,如果您将data-bind与“value:viewModel.name”一起使用,它将起作用,因为它将查找myNameSpace对象的viewModel属性的name属性。