Для текущего проекта на рабочем месте мы создаем довольно много настраиваемых элементов управления, которые имеют общие свойства и которые можно связывать.Использование атрибута @bindable в дочернем классе в Aurelia
@bindable required: boolean = false;
@bindable minLength: number = 0;
@bindable maxLength: number = 0;
Так как мы хотели бы, чтобы избежать дублирования кода, идея заключается в том, чтобы сохранить эти свойства связываемых в отдельный класс, под названием «Проверка» в данном случае.
import {Validation} from "./validation";
export class MyClass {
private validation: Validation = new Validation();
// also tried:
// @bindable validation: Validation = new Validation();
}
Вопрос заключается в том, как привязать HTML к свойствам класса Validation. Выполнение этого validation.required.bind="someProperty.required"
не обновляет свойство required
в экземпляре проверки. Мы попытались использовать DI, но это, похоже, не сократило его.
import {inject} from "aurelia-framework";
import {Validation} from "./validation";
@inject(Validation)
export class MyClass {
constructor(private validation: Validation) {
this.validation = validation;
}
}
Любые советы были бы весьма признательны.
EDIT:
Кажется, что Аурелия интерпретирует «validation.required» как команда, а не выражение.
WARN [templating-binding] Unknown binding command. Object {defaultBindingMode: null, attrName: "validation", attrValue: "true", command: "required", expression: null}
поддержка Хотя для связывания с элементами базовых классов будут поддерживаться в одном из ближайших выпусков Aurelia, есть еще один способ сохранить удвоение логики: Добавляя связываемые свойства с помощью декоратора. Я объяснил это здесь: stackoverflow.com/a/45361429/1521227 - – Spontifixus
Хотя это не отвечает на этот вопрос напрямую, есть другой подход к этому, который может вам помочь, и это использовать композицию вместо наследования. Я объяснил здесь, как это работает: https://stackoverflow.com/a/45361429/1521227 – Spontifixus