Можно ли обернуть валидацию Aurelia.js внутри компонента?

Основная идея заключена в довольно распространенной логике aurelia-validation внутри одного корневого компонента.

Пример обертки

import { inject, bindable, containerless, NewInstance } from 'aurelia-framework';
import { ValidationController, validateTrigger, ValidationRules } from 'aurelia-validation';
import FormValidationRenderer from '../custom/form-validation-renderer';

@inject(Element, NewInstance.of(ValidationController))
export class SomeForm {
    @bindable class = "class";

    constructor(element, controller) {
        this.element = element;

        // other way it would be everywhere
        this.controller = controller;
        this.controller.addRenderer(new FormValidationRenderer());
        this.controller.validateTrigger = validateTrigger.manual;
    }

    back() {
        window.history.back();
    }

    // hide all imports to simplify usages.
    rules() {
        return ValidationRules;
    }

    setValidation(model, rules) {
        this.controller.addObject(model, rules);
    }

    submit() {
        this.element.dispatchEvent(new CustomEvent('submit', {}));
    }

    validate() {
        return this.controller.validate();
    }
}

Как я собираюсь использовать это:

view.html

 <custom-form view-model.ref="form" submit.trigger="submit()">
        <h1>Form footer test</h1>
        <input type="text" class="form-control" value.bind="params.text & validate" />
 </custom-form>

view.js

export class View {
    params = {
        text: ''
    };

    attached() {
        this.setValidation(this.params, this.rules().ensure('text')
            .required().rules);

    }
    submit() {
        this.validate().then(err => {
            err.forEach(console.log);
        });
    }
}

Единственная проблема, которую я получил, это тег &validate. Внутри validate-binding-behavior.js это часть aurelia-validation, В строке 36.

Кажется, невозможно использовать этот атрибут без @inject NewInstance.of(ValidationController) один вид...

Может быть можно обойти это???

ValidateBindingBehavior.prototype.bind = function (binding, source, rulesOrController, rules) {
        var _this = this;
        // identify the target element.
        var target = this.getTarget(binding, source);
        // locate the controller.
        var controller;
        if (rulesOrController instanceof validation_controller_1.ValidationController) {
            controller = rulesOrController;
        }
        else {
            controller = source.container.get(aurelia_dependency_injection_1.Optional.of(validation_controller_1.ValidationController));
            rules = rulesOrController;
        }
        if (controller === null) {
            throw new Error("A ValidationController has not been registered.");
        }

0 ответов

Другие вопросы по тегам