如何在视图模板中使用静态方法
How to use static methods in view templates
我想在我的视图模板中使用静态 class 常量
Javascript
class FilterModel {
static const FILTER_TYPE_STRING() {
return 'string';
}
}
HTML
<div show.bind="selectedFacet.type===FilterModel.FILTER_TYPE_STRING">
</div>
简答:绑定语言不支持。
我以前遇到过这个问题,但没有找到好的解决方法。在这种情况下,我通常定义一个常量,class 会在构造函数中设置值并添加注释以表明它应该是静态的。
const _filterTypeString: string = 'string';
export class FilterModel {
/*static*/ filterTypeString: string = _filterTypeString;
}
更长的答案:JavaScript 中的静态成员被直接编译到 class 中,而不是原型中,因此实例没有引用它。区别是:
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>
我想在我的视图模板中使用静态 class 常量
Javascript
class FilterModel {
static const FILTER_TYPE_STRING() {
return 'string';
}
}
HTML
<div show.bind="selectedFacet.type===FilterModel.FILTER_TYPE_STRING">
</div>
简答:绑定语言不支持。
我以前遇到过这个问题,但没有找到好的解决方法。在这种情况下,我通常定义一个常量,class 会在构造函数中设置值并添加注释以表明它应该是静态的。
const _filterTypeString: string = 'string';
export class FilterModel {
/*static*/ filterTypeString: string = _filterTypeString;
}
更长的答案:JavaScript 中的静态成员被直接编译到 class 中,而不是原型中,因此实例没有引用它。区别是:
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>