1

Для текущего проекта на рабочем месте мы создаем довольно много настраиваемых элементов управления, которые имеют общие свойства и которые можно связывать.Использование атрибута @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}

+0

поддержка Хотя для связывания с элементами базовых классов будут поддерживаться в одном из ближайших выпусков Aurelia, есть еще один способ сохранить удвоение логики: Добавляя связываемые свойства с помощью декоратора. Я объяснил это здесь: stackoverflow.com/a/45361429/1521227 - – Spontifixus

+0

Хотя это не отвечает на этот вопрос напрямую, есть другой подход к этому, который может вам помочь, и это использовать композицию вместо наследования. Я объяснил здесь, как это работает: https://stackoverflow.com/a/45361429/1521227 – Spontifixus

ответ

0

Как обходная до наследования с привязываемыми свойствами не получает поддержки в Aurelia, я привязка к классу, который имеет некоторые общие свойства. В настоящее время связующие будут дублироваться по всем элементам управления.

import {bindable, bindingMode} from "aurelia-framework"; 
import {IControlBase, ControlBase} from "./controlbase"; 

export class MyClass { 
    @bindable controlbase: IControlBase = new ControlBase(); 
    @bindable label: string = ""; 
    @bindable editing: boolean = false; 
    @bindable({ defaultBindingMode: bindingMode.twoWay }) 
    value: string; 
}