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

Проверка Aurelia - как лучше всего получить доступ к ошибке проверки для определенного свойства?

У меня есть настраиваемый компонент текстового поля, который инкапсулирует текстовое поле mdl. Я передаю желаемое значение через его связываемое свойство. Я хочу объявить (и проверить) правила проверки в общей модели представления, а затем передать возможную ошибку проверки в каждое текстовое поле (которое должно отображать ее, как хочет).

мой текущий псевдокод:

<template>
    <text-field 
        value.two-way="entity.value1">
    </text-field>
    <text-field 
        value.two-way="entity.value2">
    </text-field>
</template>

Как передать ошибку проверки значения 1 в первое текстовое поле, а ошибку проверки значения 2 - второе?

Лучшее, что я смог сделать, это:

<template>
    <div validation-errors.bind="firstValidationErrors">
        <text-field 
            value.two-way="entity.value1"
            errors.bind="firstValidationErrors">
        </text-field>
    <div>
    <div validation-errors.bind="secondValidationErrors">
        <text-field 
            value.two-way="entity.value2"
            errors.bind="secondValidationErrors">
        </text-field>
    <div>
</template>

Но я должен создать каждый массив ошибок проверки в viewmodel (я не уверен, действительно ли мне нужно, но линтинг заставляет меня). А также я должен обернуть каждый элемент управления на своей странице. Есть ли способ лучше?

Могу я сделать что-то подобное?

<template>
    <text-field 
        value.two-way="entity.value1"
        validation-errors.bind="firstValidationErrors"
        errors.bind="firstValidationErrors">
    </text-field>

    <text-field 
        value.two-way="entity.value2"
        validation-errors.bind="secondValidationErrors"
        errors.bind="secondValidationErrors">
    </text-field>
</template>

Ответы:


1

Поскольку вы хотите, чтобы ваш text-field имел полный контроль над отображением ошибок, почему бы просто не превратить это в средство визуализации проверки?

Это довольно просто:

  1. Вставьте ValidationController и Element в свой пользовательский элемент через конструктор

  2. На bind() прописываешь так: this.controller.addRenderer(this);

  3. На unbind() вы отменяете регистрацию следующим образом: this.controller.removeRenderer(this);

  4. Реализуйте метод render следующим образом:

    public render(instruction: RenderInstruction) {
      for (const { result } of instruction.unrender) {
        const index = this.errors.findIndex(x => x.error === result);
        if (index !== -1) {
          this.errors.splice(index, 1);
        }
      }
    
      for (const { result, elements } of instruction.render) {
        if (result.valid) {
          continue;
        }
        const targets = elements.filter(e => this.element.contains(e));
        if (targets.length) {
          this.errors.push({ error: result, targets });
        }
      }
    }
    

Это дает вам ошибки в вашем настраиваемом элементе. Вы могли бы просто выполнить рендеринг прямо там.

Обратите внимание, что этот пример, который я вам даю, в значительной степени является копипастом из настраиваемого атрибута validation-errors источник

06.03.2018
Новые материалы

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

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

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

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

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

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

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