Kurze Antwort verwenden möchten: die Bindungs Sprache unterstützt das nicht.
Ich habe das Problem zuvor, aber fand keine gute Problemumgehung. In diesem Fall definiere ich normalerweise eine Konstante, aus der die Klasse den Wert im Konstruktor setzen würde, und füge einen Kommentar hinzu, um zu zeigen, dass sie statisch sein sollte.
const _filterTypeString: string = 'string';
export class FilterModel {
/*static*/ filterTypeString: string = _filterTypeString;
}
Längere Antwort: static Mitglieder in JavaScript werden direkt in die Klasse, nicht in den Prototyp transpiled, so Instanzen nicht Bezug auf sie haben. Der Unterschied ist:
class MyClass {
instanceMember: number = 256
static staticMember: number = 1024;
}
//referencing them:
MyClass.prototype.instanceMember
MyClass.staticMember
Jedesmal, wenn Sie eine Objektinstanz zu erstellen, eine Kopie des Prototyps erzeugt, so dass this
gleiche Werte zu dem Prototyp haben würde. Aurelia erstellt auch eine Instanz, wenn ein View-Modell erstellt wird.
In der Ansichtsvorlage können Sie nur auf Elemente dieses Objekts zugreifen, die vom Prototyp geerbt wurden. Da die statische Methode kein Mitglied dieses Objekts ist, können Sie nicht darauf zugreifen. Natürlich könnten Sie eine Referenz erstellen, aber ich fand diese Problemumgehung ärgerlicher als die obige. Mit Codebeispiel:
export class FilterModel {
static filterTypeString: string = 'string';
refToFilterTypeString = FilterModel.filterTypeString;
}
HTML:
<div show.bind="selectedFacet.type === refToFilterTypeString">
</div>
Im mit ES2016/ESNext. Können Sie bitte ein vollständiges Beispiel angeben? –
Entschuldigung, Ihre Frage ergibt keinen Sinn für mich. Das Ansichtsmodell ist eine Instanz. Warum möchten Sie eine statische Methode aus Ihrer eigenen Klasse verwenden? –