【问题标题】:Knockout validation after Mapping映射后的淘汰赛验证
【发布时间】:2014-02-05 09:46:57
【问题描述】:

我是淘汰赛新手,所以请多多包涵。

我正在尝试使用映射插件将从服务器接收到的 Json 数据映射到现有的 viewModel 实例。我可以毫无问题地做到这一点。但是在我的 viewModel 中,我使用了验证插件,所以一旦我映射数据并将其绑定到 UI,验证就会启动,它会立即显示错误信息。

有没有办法在单击提交按钮之前不显示该错误消息。还是我做错了什么?

这是 Jsfiddle link

由于某种原因,除非附有代码,否则不允许我提交此问题,所以这是从 jsfiddle 复制的 javascript 代码 -

 ko.validation.configure({
      parseInputAttributes: true
 });

 var data = { name: null, email: "joe@shmo.com" };

 function vm(){
   this.name = ko.observable().extend({required:true});
   this.email = ko.observable().extend({required:true});
   this.validationCheck = ko.validatedObservable(this);
 }


 var viewModel = ko.mapping.fromJS(data, {}, new vm());
 ko.applyBindings(viewModel);

【问题讨论】:

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


    【解决方案1】:

    您可以尝试的一种方法是最初隐藏所有验证消息,然后将功能添加到再次显示它们的视图模型中。然后,您将在单击提交按钮时调用该函数。

        ko.validation.configure({
        parseInputAttributes: true
    });
    
    var data = { name: "Joe Shmo", email: "joe@shmo.com" };
    
    var validationMapping = {
        'name': {
            create: function(options) {
                return ko.observable(options.data).extend({required: true});
            }
        }
    }
    
    var viewModel = ko.validatedObservable(ko.mapping.fromJS(data, validationMapping));
    
    viewModel().showValidation = function()
    {
        $$('.validationMessage').set('style', 'display:inline');
        return viewModel.isValid();
    }
    ko.applyBindings(viewModel);
    

    演示:http://jsfiddle.net/bS62w/3/

    【讨论】:

    • 谢谢李..这是解决方法。我认为有一种适当的方法来处理这个问题,或者我做错了什么。我正在检查文档,将很快更新任何发现。
    猜你喜欢
    • 2012-12-05
    • 1970-01-01
    • 2012-12-25
    • 2012-06-08
    • 1970-01-01
    • 2012-02-18
    • 2014-06-23
    • 2015-03-30
    • 2017-07-07
    相关资源
    最近更新 更多