如何在视图模板中使用静态方法

时间:2017-06-06 09:19:32

标签: aurelia aurelia-binding aurelia-templating

我想在视图模板中使用静态类常量

的Javascript

class FilterModel {
  static const FILTER_TYPE_STRING() {
    return 'string';
  }
}

HTML

<div show.bind="selectedFacet.type===FilterModel.FILTER_TYPE_STRING">
</div>

1 个答案:

答案 0 :(得分:2)

简短回答:绑定语言不支持。

我之前遇到过这个问题,但没有找到一个好的解决方法。在这种情况下,我通常定义一个常量,类将在构造函数中设置值,并添加注释以显示它应该是静态的。

const _filterTypeString: string = 'string';

export class FilterModel {
    /*static*/ filterTypeString: string = _filterTypeString;
}

更长的答案:JavaScript中的静态成员被直接转换为类,而不是原型,因此实例没有引用它。区别在于:

class MyClass {
    instanceMember: number = 256
    static staticMember: number = 1024;
}

//referencing them:
MyClass.prototype.instanceMember
MyClass.staticMember

每次创建对象实例时,它都会创建原型的副本,以便this具有与原型相同的值。这也是Aurelia在创建视图模型时创建的实例。

在视图模板中,您只能访问该对象的成员,该成员继承自原型。由于静态方法不是该对象的成员,因此无法访问它。当然,你可能会创建一个引用,但我发现这个解决方法比上面的方法更烦人。使用代码示例:

export class FilterModel {
    static filterTypeString: string = 'string';
    refToFilterTypeString = FilterModel.filterTypeString;
}

HTML:

<div show.bind="selectedFacet.type === refToFilterTypeString">
</div>