Angularjs 使用Breeze在基于角度的SPA中验证剑道日期选择器

Angularjs 使用Breeze在基于角度的SPA中验证剑道日期选择器,angularjs,kendo-ui,breeze,Angularjs,Kendo Ui,Breeze,我在建一个有角的水疗中心。后端是一个ASP.NET MVC WebApi服务器。模型是 在实体框架的帮助下持久化。Breeze获取由提供的元数据 实体框架,并将其传输到浏览器中的SPA应用程序 在一种情况下,我使用剑道日期选择器。它配置了德语日期格式(“dd.MM.yyyy”)。 我还用data-z-validate属性注释了输入标记 当有人输入无效的日期字符串时,我希望看到带有 验证错误消息。不幸的是,这并没有发生。更糟糕的是,似乎没有验证 根本就没有被执行过 我需要在客户端添加自定义验证器吗

我在建一个有角的水疗中心。后端是一个ASP.NET MVC WebApi服务器。模型是 在实体框架的帮助下持久化。Breeze获取由提供的元数据 实体框架,并将其传输到浏览器中的SPA应用程序

在一种情况下,我使用剑道日期选择器。它配置了德语日期格式(“dd.MM.yyyy”)。 我还用data-z-validate属性注释了输入标记

当有人输入无效的日期字符串时,我希望看到带有 验证错误消息。不幸的是,这并没有发生。更糟糕的是,似乎没有验证 根本就没有被执行过

我需要在客户端添加自定义验证器吗?如果是,我该怎么做

角度视图:

<input kendo-date-picker id="aktion-termin" type="text" placeholder="Termin"
       k-ng-model="vm.aktion.termin" k-format="'dd.MM.yyyy'" 
       data-z-validate />
元数据:

"entityType":[

    {
        "name":"Aktion",

        ...

        "property":[

            ...

            {
                "name":"Termin",
                "type":"Edm.DateTime"
            },

            ...
        ],

        ...
    }
其他信息

同一表单上还有另一个必填字段。在这里,验证工作正常。验证 当我将字段留空时,出现错误弹出窗口。因此,整个基础设施似乎都能正常工作。但是 它是一个标准输入字段。没有剑道参与

<input class="form-control" id="aktion-titel" placeholder="Name"
       data-ng-model="vm.aktion.titel" data-z-validate />

所述日期字段也起作用。根据给定格式输入有效的日期字符串时 (例如,“02.01.2015”)执行保存命令后,我可以在数据库中看到正确的值。我也能看见 由Breeze发送到服务器的JSON中插入的日期。只要系统正常运行,一切都正常 插入的日期字符串满足给定的日期格式

{
    "$id":"1",
    "$type":"Breeze.ContextProvider.SaveResult, Breeze.ContextProvider",
    "Entities":[
        {
            "$id":"2",
            "$type":"Aktionen.Model.Aktion, Aktionen.Model",
            "Id":"a0b2639a-c79b-46ef-a5ee-6982dcbe1782",
            "Titel":"abc",
            "Termin":"2015-01-02T00:00:00.000+01:00",        // <----- ok

            ...
        },

        ...
    ],
    "KeyMappings":[

    ],
    "Errors":null
}
{
“$id”:“1”,
“$type”:“Breeze.ContextProvider.SaveResult,Breeze.ContextProvider”,
“实体”:[
{
“$id”:“2”,
“$type”:“Aktionen.Model.Aktion,Aktionen.Model”,
“Id”:“a0b2639a-c79b-46ef-a5ee-6982dcbe1782”,
“滴度”:“abc”,
“Termin”:“2015-01-02T00:00:00.000+01:00”,//空

给定此输出,我假设剑道日期选择器仅在输入为
有效。

我不确定日期选择器周围实际生成的HTML剑道是什么。我敢打赌,
z-validate
无法识别它;
z-validate
是一种原型或概念证明,它肯定不是在考虑剑道控件的情况下设计的


您是否可以查看新值是否写入实体的date属性?当您以编程方式而不是通过任何UI绑定设置属性时,Breeze是否也会验证日期?如果您不知道如何进行测试,请告诉我。

Kendo UI Controls introduce一个新的
k-ng-model
指令,该指令用于dat默认情况下,绑定而不是默认的角度
ng模型
z-validate
仅识别
ng模型

参见本节了解
z-validate
,它为`z-validate'添加了对剑道UI控件的支持


由@Ward决定这是否适合默认的
z-validate
发行版,但您仍然可以将PR应用到您使用过的
breeze.directions.js

版本。我在我的问题中添加了一些附加信息。但它看起来更像是与剑道相关,而不是与breeze相关。这现在包含在breeze中指令1.3.10
{
    "$id":"1",
    "$type":"Breeze.ContextProvider.SaveResult, Breeze.ContextProvider",
    "Entities":[
        {
            "$id":"2",
            "$type":"Aktionen.Model.Aktion, Aktionen.Model",
            "Id":"a0b2639a-c79b-46ef-a5ee-6982dcbe1782",
            "Titel":"abc",
            "Termin":"2015-01-02T00:00:00.000+01:00",        // <----- ok

            ...
        },

        ...
    ],
    "KeyMappings":[

    ],
    "Errors":null
}
{
    "$id":"1",
    "$type":"Breeze.ContextProvider.SaveResult, Breeze.ContextProvider",
    "Entities":[
        {
            "$id":"2",
            "$type":"Aktionen.Model.Aktion, Aktionen.Model",
            "Id":"736f976c-9e3b-42ee-90a9-ca421b6c2843",
            "Titel":"The Name",
            "Termin":null,                                 // <------ bad

            ...
        },

        ...
    ],
    "KeyMappings":[

    ],
    "Errors":null
}
function save() {
    if (vm.isSaving) { return common.$q.when(null); }
    if (!canSave()) { return common.$q.when(null); }

    vm.aktion.termin = "xyz";    // <--------- rubbish

    vm.isSaving = true;
    return datacontext.save().then(function() {
        vm.isSaving = false;
    }, function () {
        vm.isSaving = false;
    });
}