Ich habe benutzerdefinierte Tabs-Funktionalität, aber nach dem Update von Aurelia auf rc-1.0.x, gibt es ein Problem mit Auflistungsdaten von @children Dekorator.Aurelia: Wie kann man verfolgen, ob @children-Elemente geladen sind?
Mein Code sieht in etwa so aus: import {inject, customElement, children} aus 'aurelia-framework';
@customElement('tabs')
@inject(Element)
@children({name:'tabs', selector: "tab"})
export class Tabs {
activeTab = undefined;
constructor(element) {
this.element = element;
}
attached() {
console.log(this.tabs); // Return undefined on promise resolve!!!
this.tabs.forEach(tab => {
if (tab.active) {
this.activeTab = tab;
}
tab.hide();
});
this.activeTab.show();
}
Auf dem ersten Last alles funktioniert ganz gut, und this.tabs ist ein Array von Elementen, wie erwartet.
Als nächstes, wenn ich eine Server-Anfrage, wenn Versprechen ist gelöst this.tabs Konsole Protokolle undefiniert.
Wenn ich Timeout einstellen behebt das Problem, aber ist das der richtige Weg?
Auch bemerkte ich in dem HTML-Code, dass die repeat.for Anweisung ausgeführt wird, die mir einen Hinweis geben, dass this.tabs mit einem gewissen Verzögerung empfangen wird, nachdem die angeschlossene Funktion behandelt wird.
Die html:
<template>
<ul class="nav nav-tabs m-b-1">
<li repeat.for="tab of tabs">
<a href="#" click.trigger="$parent.onTabClick(tab)">
${tab.name & t}
</a>
</li>
</ul>
<slot></slot>
</template>
So ist es eine Möglichkeit, dass die Arbeit mit der Aurelia binden oder an Methoden oder eine elegantere Art und Weise zu machen, anstatt den Wert this.tabs mit einer Timeout-Funktion zu überprüfen?
Wo ist das Versprechen in Ihrem Code gelöst? –
Registerkarten sind Teil eines anderen benutzerdefinierten Elements. Das Versprechen wird in einer anderen Kerndatei gelöst, die wir mit bindEngine verfolgen und das Modell dieses benutzerdefinierten Elements aktualisieren. –
Würde es Ihnen etwas ausmachen, mit gist.run eine schnelle Repro Ihres Problems zu erstellen? Ich habe eine grundlegende Einrichtung für Sie erstellt, um von hier aus zu starten: https://gist.run/?id=cbf7a20cd866d4c2a56ddda80ab26764 Fügen Sie einfach den erforderlichen Code hinzu, klicken Sie auf "Fork to Public Gist" und veröffentlichen Sie den Link als Kommentar. –