动态视图模型的Knockout验证

时间:2013-03-04 10:53:24

标签: knockout.js data-annotations knockout-mapping-plugin knockout-validation

我正在动态创建knockout viewmodel,这段代码运行正常。我想在此viewmodel中添加验证。我可以在此viewmodel中添加验证吗?这是一个好方法还是应该自己创建viewmodel并自己添加验证属性?或者任何客户端验证是否与数据注释一起使用?

var viewModel = function () {
        var self = this;
        self.States  =ko.observableArray();
        self.Countries =ko.observableArray();
        self.showStates = ko.observable(false);
        self.saveData = function (self) { //save data function };
  }
var VM= new viewModel();

$.ajax({
success: function(data)
{ 
   var newVM = ko.mapping.fromJS(data, {}, VM);
   // newVM.FirstName, newVM.LastName
   // I want to add validation in this newVM 
}

1 个答案:

答案 0 :(得分:2)

由于您使用KO Mapping插件加载数据,因此您还可以选择挂钩“创建”事件并根据需要添加单个项目的验证。如下所示:

$.ajax({
success: function(data)
{ 
  var mappingOption = {    
       'FirstName': {
          create: function (option) {
             return ko.observable(option.data).extend({ required: true });
          }
       }, 
       'LastName': {
          create: function (option) {
             return ko.observable(option.data).extend({ required: true });
          }
       }
   }
   // Now load your viewModel with the mapping option you just specified
   var newVM = ko.utils.arrayMap(data, function (item) {
       return ko.mapping.fromJS(item, mappingOption);
   });
   // ... From now on... in your newVM... firstName and lastName will be 'required'
}

希望这有帮助。

感谢。