我使用Knockoutjs 3.0.0和Knockoutjs-Validate,大多数时候它们运行良好。现在,当我尝试验证部分View模型时,我遇到了问题。 像这样:
function DataViewModel() {
var self = this;
self.username = ko.observable("").extend({ required: {message:"User name is required!" }});
self.password = ko.observable().extend({ required: {message:"Password is required!" }});
self.login = function () {
if (self.isValid()) {
self.errors.showAllMessages();
return false;
}
$("#loginform").submit();
};
}
我还有控制页面属性的Page Viewmodel。
function PageViewModel(){
var self=this;
self.contentheader=ko.observable("Login");
self.usernamelabel = ko.observable("User Name");
self.passwordlabel = ko.observable("Password");
}
我像这样创建ViewModel:
function ViewModel()
{
var self=this;
self.data= ko.validatedObservable(new DataViewModel());
self.page= new PageViewModel();
}
最后我绑定了KO var vm = new ViewModel(); ko.applyBindings(VM);
为什么我这样做的程序是: 在DataViewModel中,我存储将从服务器传递或加载的数据,页面视图模型我控制此页面的行为,我应该在用户向服务器提交数据时验证DataViewModel。但它不起作用,我看到KO模型像这样引发错误
TypeError: obsv is undefined
任何人都可以提供帮助吗?
答案 0 :(得分:1)
在您的情况下,您可以处理该模型中DataViewModel
的验证。在模型中添加一个observable来跟踪验证,如此
self.errors = ko.validation.group(self);
并将主视图模型中的DataViewModel
实例更改为普通ko.observable
,而不是经过验证的可观察对象。我made a fiddle with the complete code。