Javascript 如何使用敲除验证

Javascript 如何使用敲除验证,javascript,knockout.js,breeze,knockout-validation,Javascript,Knockout.js,Breeze,Knockout Validation,我遵循这一点来创建验证 但是我不明白如何在代码中使用这个扩展方法 我将数据加载到observable中,记录来自调用breeze查询 我以下面的方式加载数据 dataObsArray= ko.observableArray() datacontext.getData(id,dataObsArray) .then(function () { // some logic }) .fail("Data not foun

我遵循这一点来创建验证

但是我不明白如何在代码中使用这个扩展方法

我将数据加载到observable中,记录来自调用breeze查询

我以下面的方式加载数据

dataObsArray= ko.observableArray()

datacontext.getData(id,dataObsArray)
                   .then(function () {

          // some logic


 })
        .fail("Data not found");
然后我将这个obs数组绑定到我的视图,如下所示

<tbody data-bind="with: dataObsArraay">
            <tr>
                <td>name</td>
                <td> <input data-bind="  value: Name" ></td>
                <td> <input data-bind="  value: Age" ></td>

            </tr>
</tbody>

名称
所以我不明白如何使用extend方法,因为我只是用可观察数组中的属性绑定视图


请指导我。

您需要为您的数据创建一个模型,例如:

function person(name, age) {
    this.name = ko.observable(name).extend({ minLength: 2, maxLength: 10 });
    this.age = ko.observable(age).extend({ min: 18, max: 99 });
}

var data = [],
    people = ko.observableArray();

datacontext.getData(id, data)
    .then(function (data) {
        for (i = 0; i < data.length; i++) {
            people.push(new person(data.Name, data.Age));
        }
    })
    .fail("Data not found");


<tbody data-bind="foreach: people">
    <tr>
        <td>name</td>
        <td> <input data-bind="  value: name" ></td>
        <td> <input data-bind="  value: age" ></td>
    </tr>
</tbody>
职能人员(姓名、年龄){
this.name=ko.observable(name).extend({minLength:2,maxLength:10});
this.age=ko.observable(age).extend({min:18,max:99});
}
var数据=[],
people=ko.observearray();
getData(id,数据)
.then(功能(数据){
对于(i=0;i
考虑使用,而不是通过淘汰扩展程序将验证逻辑放入UI代码中。使用breeze验证将确保始终对规则进行评估,并避免您为验证目的在实体上创建额外的模型

下面是一个使用breeze内置验证器之一的示例:stringLength验证器

var entityType = entityManager.metadataStore.getEntityType('????'),
    nameProperty = entityType.getProperty('Name'),
    nameLengthValidator = breeze.Validator.stringLength({ maxLength: 10, minLength: 2 });
nameProperty.validators.push(nameLengthValidator);
下面是一个不允许纯空白值的字符串的自定义必需验证器示例:

// make a reusable validator
var myRequiredValidator = breeze.Validator.makeRegExpValidator(
    "myRequiredValidator",  
    /\S/,  
    "The %displayName% '%value%' cannot be blank or entirely whitespace");

// register it with the breeze Validator class.
breeze.Validator.register(myRequiredValidator);

// add the validator to the Name property...
var entityType = entityManager.metadataStore.getEntityType('????'),
    nameProperty = entityType.getProperty('Name');
nameProperty.validators.push(nameLengthValidator);
下面是制作正则表达式验证器的步骤


您还可以编写自定义验证器-查看以了解更多信息-查找“编写自定义验证器”部分。

在您的视图模型中,您是否有一个包含实体(例如名称、年龄等)的函数。如果你需要使用
.extend({//logic here})
。我可以用敲除法帮你发布一些答案,但我不知道如果我在输入框中使用空格,我会使用什么样的验证?我在实体上放置了[Required]属性,但当我尝试保存时,我得到entityAspect.hasValidationErrors为false。。我不希望用户只允许空格我不希望字符串中只允许空格。。我也在我的实体上尝试过这个[Required(AllowEmptyStrings=false)],我正试图将它直接放在我的实体上。像这样的[Required][Column(TitleCol,TypeName=“varchar”)][MaxLength(1000)]公共虚拟字符串描述{get;set;}换句话说,您希望breeze尊重与验证相关的.NET数据注释。在某些情况下确实如此,在其他情况下,您需要补充breeze元数据并添加您自己的自定义验证。查看此问题以了解有关此问题的更多信息: