Knockoutjs只验证chind类

时间:2014-02-12 16:13:36

标签: knockout.js knockout-validation

我使用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

任何人都可以提供帮助吗?

1 个答案:

答案 0 :(得分:1)

在您的情况下,您可以处理该模型中DataViewModel的验证。在模型中添加一个observable来跟踪验证,如此

self.errors = ko.validation.group(self);

并将主视图模型中的DataViewModel实例更改为普通ko.observable,而不是经过验证的可观察对象。我made a fiddle with the complete code