0

我在将命名空间和敲除验证相结合时遇到了问题。这打破了验证:敲除验证和命名空间

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); 

工作正常。

任何人都可以向我解释区别吗?

回答

0

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

当您使用ko.applyBindings(myNameSpace.viewModel)绑定它时,它在视图模型对象内查找名称。它确实找到了它,因此可以绑定到属性或可观察。然而,在第一种情况下,如果你要使用data-bind和“value:viewModel.name”,它会起作用,因为它会寻找myNameSpace对象的viewModel属性的name属性。