在Aurelia中使用子类的@bindable属性

时间:2016-01-13 01:24:50

标签: html dependency-injection typescript aurelia aurelia-binding

对于当前正在工作的项目,我们正在创建相当多的自定义控件,这些控件都共享相同的属性并且可绑定。

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

任何提示都将不胜感激。

编辑:

似乎Aurelia解释了“验证。需要”'作为一个命令,而不是一个表达。

WARN [templating-binding] Unknown binding command. Object {defaultBindingMode: null, attrName: "validation", attrValue: "true", command: "required", expression: null}

1 个答案:

答案 0 :(得分: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;
}