Nano Hash - криптовалюты, майнинг, программирование

Проверка в Kendo DatePicker в SPA на основе Angular с Breeze

Я создаю SPA с Angular. Серверная часть представляет собой сервер ASP.NET MVC WebApi. Модель сохраняется с помощью Entity Framework. Breeze получает метаданные, предлагаемые Entity Framework, и передает их в приложение SPA в браузере.

В одной форме я использую Kendo DatePicker. Он настроен с немецким форматом даты ("дд.ММ.гггг"). Я также аннотировал входной тег атрибутом 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 />

Класс модели:

public class Aktion
{

    ...

    [DataType(DataType.Date)]
    public DateTime? Termin { get; set; }

    ...    
}

Метаданные:

"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»), я вижу правильное значение в базе данных после команды сохранения. Я также могу видеть вставленную дату в JSON, который Breeze отправляет на сервер. Все работает правильно, пока вставленная строка даты соответствует заданному формату даты.

{
    "$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
}

Когда я ввожу мусор (например, «xyz»), на сервер отправляется нулевое значение. И ноль - это то, что я вижу в базе данных.

{
    "$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
}

Это не совсем то поведение, которое я имел в виду. Приложение должно информировать пользователя о недопустимой дате, показывая всплывающее окно проверки. И он не должен принимать запись и не должен отправлять ее на сервер.

Когда я обхожу средство выбора даты кендо, программно устанавливая строку даты, я получаю ошибку проверки от Breeze: «'termin' должна быть датой».

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;
    });
}

Когда я отлаживаю эту функцию, я вижу значения свойства vm.aktion.termin:

"01.01.2015" --> Чт, 01 января 2015 г., 00:00:00 GMT+0100 (Mitteleuropäische Zeit)

"xzy" --> ноль

Учитывая этот вывод, я предполагаю, что средство выбора даты кендо выдает строку даты только тогда, когда ввод действителен.


Ответы:


1

Я не уверен, что HTML Kendo на самом деле генерирует вокруг средства выбора даты. Бьюсь об заклад, что z-validate не сможет его распознать; z-validate является своего рода прототипом или доказательством концепции, и он определенно не был разработан с учетом элементов управления кендо.

Можете ли вы увидеть, записано ли новое значение в свойство даты объекта? Также Breeze проверяет дату, когда вы устанавливаете свойство программно, а не через какую-либо привязку пользовательского интерфейса? Дайте мне знать, если вы не знаете, как это проверить.

30.01.2015
  • Я добавил дополнительную информацию к моему вопросу. Но похоже, что это больше связано с кендо, чем с бризом. 30.01.2015

  • 2

    Элементы управления Kendo UI содержат новую директиву k-ng-model, которую вы используете для привязки данных вместо стандартной Angular ng-model. z-validate по умолчанию распознает только ng-model.

    См. этот Pull Request для z-validate, который добавляет поддержку элементов управления Kendo UI в ` z-подтвердить.

    @Ward должен решить, подходит ли это к дистрибутиву z-validate по умолчанию или нет, но вы все равно можете применить PR к вашей используемой версии breeze.directives.js.

    01.02.2015
  • Теперь это включено в директивы Breeze 1.3.10. 26.04.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..