标签: knockout-validation

淘汰赛验证和Qtip

我目前使用Jquery Validation和Qtip来处理实际验证并使用验证错误的错误工具提示样式通知使用验证选项的errorPlacement组件向屏幕显示信息.

目前每个viewModel都有自己的自定义方法来设置和启动验证和回调,但是我试图找到一种更好的方法来做到这一点,无论是添加自定义绑定来通过数据绑定设置我的验证规则还是另一种方法,但仍然产生相同的结果(即,当发生验证错误时触发errorPlacement并告诉Qtip显示给定元素的错误).

在我开始自己制作之前,我刚刚在线查看并找到了Knockout Validation,我最初认为这是一个好主意,我可以将我的验证逻辑直接应用于我的viewModel中的数据,然后找到一些回调来获得Qtip启动,但似乎没有回复,我可以找到记录.图书馆似乎做了我想要的所有事情的验证方面,而不是显示方面的事情.我查看了源代码和示例但看不到除ko.validation.group(viewModel)以外的任何内容,它会给我一个包含错误的observable,但我不确定是否可以像我一样使用它期待.

以下是我当前验证如何发生的示例:

/*globals $ ko */
function SomeViewModel() {

    this.SetupValidation = function () {
        var formValidationOptions = {
            submitHandler: self.DoSomethingWhenValid,
            success: $.noop,
            errorPlacement: function (error, element) {
                if (!error.is(':empty'))
                { qtip.DoSomethingToDisplayValidationErrorForElement(element, error); }
                else
                { qtip.DoSomethingToHideValidationErrorForElement(element); }
            }
        };

        $(someForm).validate(formValidationOptions);
        this.SetupValidationRules();
    };

    this.SetupValidationRules = function() {
        $(someFormElement1).rules("add", { required: true, minlength: 6, maxlength: 20, alphaNumeric: true });
        $(someFormElement2).rules("add", { required: true, minlength: 6, maxlength: 20 });
        $(someFormElement3).rules("add", { required: true, email: true, });
    }; …
Run Code Online (Sandbox Code Playgroud)

javascript validation qtip knockout.js knockout-validation

5
推荐指数
1
解决办法
4097
查看次数

Knockout.js的视图模型声明.有两种方法

我使用Knockout.js作为富客户端应用程序,它将包含大量的knockout.js ViewModels.在开发过程中,我注意到了两种创建knockout.js ViewModels的方法.第一种方式.

function AppViewModel() {
this.firstName = ko.observable("Bert");
this.lastName = ko.observable("Bertington");}
Run Code Online (Sandbox Code Playgroud)

第二种方式.

var appViewModel = {
this.firstName = ko.observable("Bert"),
this.lastName = ko.observable("Bertington")};
Run Code Online (Sandbox Code Playgroud)

这两种声明ViewModels的方法有什么特别的区别吗?在knockout.js官方页面示例中,他们使用了第一种方式.但在第三方框架中,如Knockout-validations.js已采用第二种方式.我应该使用哪种方式?使用它有什么特别的优势吗?

我发现如果我使用第一种方式,那么我不能使用Knockout-validations.js框架.我真的很困惑这个问题.任何评论表示赞赏.

谢谢.

javascript mvvm viewmodel knockout.js knockout-validation

5
推荐指数
1
解决办法
701
查看次数

根据条件验证observableArray

我正在尝试试验,看看是否有任何聪明的解决方案来创建自定义验证器,可以抽象出来以获得整洁和重用.

在下面的jsfiddle中,我只是将一个简单的父模型放在一起,存储和测量数组(只是一个值和一个日期).在这个例子中,我提出了两个要求.

  1. 每个测量都提供两个字段,或者两者都不提供.
  2. 在父数组中必须至少有一个有效(满足先前条件)测量.

    理想情况下,我想要确定有效的验证逻辑,存储在Measurement对象中,如下所述.但是,我非常讨厌的是我必须在父模型中执行的"动手"验证atLeastOne().

Knockout验证将自动验证各个字段的数字和日期但是我必须介入并对阵列规则执行验证.

问题:是否允许我设置KO验证的任何方法检查数组是否满足所需条件,同时仍然将HasValues方法仍存在于测量模型中??? 即我想将搜索"至少一个"的概念抽象为某种可以为我处理工作的自定义验证器,然后告诉这个验证器"嘿,这是我希望你用来验证的函数数组中的每个项目."

提前致谢!

    function Model(data) 
    {
       var self = this;
        self.Measurements = ko.observableArray();

       for(var i = 0; i < data.length; i++)
           self.Measurements.push(new Measurement(data[i]));

        function hasAtLeastOne(){
           var atLeastOne = false;
            $.each(self.Measurements(), function(i, item) { 
                if (item.HasValues()) { 
                   atLeastOne = true; 
                   return; 
                 } 
            });
            return atLeastOne;
        }

        self.Save = function() {               
            if (self.canSave() && atLeastOne())
                alert('save');
            else
                alert('arg!');
        };

        self.errors = ko.validation.group(self);
        self.canSave = ko.computed(function() {
            return self.errors().length == 0;
        }); …
Run Code Online (Sandbox Code Playgroud)

knockout.js knockout-validation

5
推荐指数
1
解决办法
4494
查看次数

如何在requirejs中使用knockout加载knockout.validation

我将在require js中定义我的模型,我需要在我的模块和jquery中使用knockoutknockout验证插件.

define(["knockout","jquery","knockout.validation"], function (ko,$,validation) {
  // knockout model here with some knockout validation 

    return function SignUpViewModel() {
    var self = this;
    self.name = ko.observable();
    self.email = ko.observable().extend({ required: true });
    self.password = ko.observable().extend({
       required: true,
       minLength: 6
   });
   self.confirmPassword = ko.observable().extend({ mustEqual: self.password() });
   self.company = ko.observable();
   self.availableCountries = ko.observableArray(['Pakistan', 'USA', 'Egypt', 'UAE']);
   self.selectedCountry = ko.observable();
   self.errors = ko.validation.group(self);
   }           
 });
Run Code Online (Sandbox Code Playgroud)

但是当我运行这个时,我得到了以下错误.

Uncaught ReferenceError: ko is not defined
Run Code Online (Sandbox Code Playgroud)

我也尝试调试,发现所有其他库knockout,jquery正在加载完美.

这是我的配置部分

require.config({ …
Run Code Online (Sandbox Code Playgroud)

jquery requirejs knockout.js knockout-validation

5
推荐指数
1
解决办法
5360
查看次数

淘汰验证组错误检查

我有一个由两部分组成的淘汰表.当第一部分被填写时,第二部分被隐藏.完成第一部分并单击"继续"后,将隐藏第一部分,并显示第二部分.我希望能够验证第一组输入,如果没有错误,则继续下一部分.

我在官方的github页面上找到了这个,我正在尝试这样做.

当我这样做时,没有检测到错误.它继续到第二部分

function ReserveViewModel(){

    self.firstName = ko.observable("").extend({ required: true });

    self.continue = function(){
        var errors = ko.validation.group([ReserveViewModel.firstName]);
        if (errors.length == 0) {
            //display  second div
        }
        else{
             self.errors.showAllMessages();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做它可以工作,但试图验证一切.由于第二组输入是空的,它只是挂在那里.

self.continue = function(){
    self.errors = ko.validation.group(self);
    if (self.errors().length == 0) {

    }
    else{
        self.errors.showAllMessages();
    }
}
Run Code Online (Sandbox Code Playgroud)

javascript jquery knockout.js knockout-validation

5
推荐指数
1
解决办法
1万
查看次数

ko.validation.configure与ko.validation.init之间的区别

两者都用于在viewmodel上应用挖空验证配置.这两个陈述有什么不同?

谢谢

knockout.js knockout-validation

5
推荐指数
1
解决办法
2543
查看次数

在Blur上验证

我创建了一个JSFiddle来帮助演示我的问题:http://jsfiddle.net/jeffreyrswenson/CrYWn/5/

这是我想看到的:

  • 页面加载时不应出现消息.
  • 按下提交按钮时应显示消息.
  • 更改输入值并且用户离开元素后,应显示消息.(标签或点击下一个字段)
  • 消息应在用户离开输入后显示而不更改.(例如,需要一个字段,用户在字段中选项,但不输入值.我希望在发生这种情况时显示验证消息.)

前四个工作正如我所料.最后一项是否可能,如果是,我需要更改哪些才能启用该行为?

HTML:

<label>First name:
<input data-bind='value: firstName' />
</label>
<br/>
<label>Last name:
    <input data-bind='value: lastName' />
</label>
<br/>
<button type="button" data-bind='click: submit'>Submit</button>
<br/>
<span data-bind='text: errors().length'></span> errors
Run Code Online (Sandbox Code Playgroud)

视图模型:

var viewModel = function () {
       ko.validation.configure({
           decorateElement: true,
           registerExtenders: true,
           messagesOnModified: true,
           insertMessages: true,
           parseInputAttributes: true,
           messageTemplate: null
       });

       this.firstName = ko.observable().extend({
           required: true
       });
       this.lastName = ko.observable().extend({
           required: true,
           pattern: {
               message: 'Hey this doesnt match my pattern',
               params: '^[A-Z0-9]+$'
           } …
Run Code Online (Sandbox Code Playgroud)

knockout-validation

5
推荐指数
1
解决办法
3558
查看次数

不会触发自定义验证规则

我正在使用此处areSame规则:

ko.validation.rules['areSame'] = {
    getValue: function (o) {
        return (typeof o === 'function' ? o() : o);
    },
    validator: function (val, otherField) {
        return val === this.getValue(otherField);
    },
    message: 'The fields must have the same value'
};
Run Code Online (Sandbox Code Playgroud)

并像这样应用它:

this.confirm = ko.observable().extend({
    areSame: {
       params:this.password
    }
});
Run Code Online (Sandbox Code Playgroud)

但它甚至从未触发过.我把调试器放到validator规则定义的函数中:validator:function(val,otherField){debugger return val === this.getValue(otherField); 然而,流程从未访问过这一点.可能有什么不对?

编辑:

通过调用解决了不触发验证的问题ko.validation.registerExtenders();,但规则不能按预期工作.问题是otherField传递给的变量validator是对象 {params:*observable here*},getValue正如您从源代码中看到的那样,方法不期望这样.所以要么源代码错了,要么我以错误的方式为规则定义了参数.那么哪一个?

knockout.js knockout-validation

5
推荐指数
1
解决办法
1799
查看次数

不引人注意的验证不适用于K-Mvc

我正在使用Knockoutmvc进行我的项目.以下是代码.

@using PerpetuumSoft.Knockout
@model OpManWeb.ViewModel.Customer.AddressVM

@{
    var ko = Html.CreateKnockoutContext();
}

@{
    ViewBag.Title = "Add/Edit Address";
}


    @Scripts.Render("~/jqueryval")

@using (ko.Html.Form("SaveContact", "Customer"))
{
    @Html.ValidationSummary(true)

     @ko.Html.TextBox(m => m.BlockNo, new { @class = "form-control fieldtextinput input-sm" })
     @Html.ValidationMessageFor(model => model.BlockNo)

    <button type="submit" class="btn btn-sm btn-primary" style="margin-top:15px" />

}
@ko.apply(Model)
Run Code Online (Sandbox Code Playgroud)

我已经检查过它正在使用MVC的Normal Html Helpers.但是使用knockoutmvc它不起作用.如果有人遇到这样的问题,请帮忙......

c# asp.net asp.net-mvc knockout-validation knockout-mvc

5
推荐指数
0
解决办法
65
查看次数

淘汰验证不起作用

这可能是最简单的问题,但我无法解决这个问题.我页面上的验证无效.每次我提交页面时,所有输入字段都空白,会生成一条警告,说"失败".如果我输入所有具有某些值的字段,则数据已成功提交.

这是我的HTML:

@{
ViewBag.Title = "Exercise10";
}
<html>
<head>

<script src="../../Scripts/jquery-1.6.2.js" type="text/javascript"></script>
<script src="../../Scripts/knockout-2.2.1.js" type="text/javascript"></script>
<script src="../../Scripts/knockout.mapping-latest.js" type="text/javascript"></script>
<script src="../../Scripts/json2.js" type="text/javascript"></script>
<link href="../../Content/ExerciseStyle.css" rel="stylesheet" type="text/css" />
<script src="../../Scripts/Popup.js" type="text/javascript"></script>


<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.0/themes/base/jquery-    ui.css" />
<script src="http://code.jquery.com/ui/1.10.0/jquery-ui.js"></script>
<script src="../../Scripts/DatePicker.js" type="text/javascript"></script>
<script src="../../Scripts/knockout.validation.js" type="text/javascript"></script>
<script src="../../Scripts/knockout-validator.js" type="text/javascript"></script>
<script src="../../Scripts/knockout-validator-extensions.js" type="text/javascript"></script>
<link href="../../Scripts/extensions.css" rel="stylesheet" type="text/css" />

</head>
<body>
<form action="" method="post">
<div id="MainArea">
    <table id="tbllist" align="center" style="margin-left: 15px; width: 96%; margin-      right: 15px;">
        <tr>
            <th colspan="3" align="left">
                <div id="title_p">
                    Enter Following Entries</div>
            </th> …
Run Code Online (Sandbox Code Playgroud)

knockout-validation

4
推荐指数
1
解决办法
7169
查看次数