Dies ist ein folgen auf diese Frage: Access a DOM element in AureliaWann wird die Bindung an das Attribut ref in Aurelia gültig?
Gibt es einen Haken in der Lifecycle-Bildschirm Aktivierung, die ich haben Code nachref
Bindungen laufen zu lassen eingerichtet? Momentan scheint es eine Zeitperiode zu geben, nachdem der activate
Hook aufgerufen wird, wenn die ref
Bindungen noch nicht eingerichtet sind und sie dann irgendwann aktiviert werden. Getestet habe ich diese durch eine <div ref="myDiv"></div>
bis nahe dem Boden des welcome.html
in einer geklonten Version des neuesten (v0.13.0) Skelett-Navigation Repo- und die Prüfung der Existenz der Referenz in der View-Modell wie folgt ergänzt:
export class Welcome{
heading = 'Welcome to the Aurelia Navigation App!';
firstName = 'John';
lastName = 'Doe';
testMyDiv() {
console.log("Getting my div")
console.log(this.myDiv)
}
get fullName(){
this.testMyDiv()
return `${this.firstName} ${this.lastName}`;
}
welcome(){
alert(`Welcome, ${this.fullName}!`);
}
}
ein Ausschnitt aus der Unterseite der Vorlage ...
<button type="submit" class="btn btn-default">Submit</button>
</form>
<div ref="myDiv"></div>
</section>
</template>
Dies ist ein Überblick von dem, was ich in der Konsole sehen ...
welcome.js:10 Getting my div
welcome.js:11 undefined
welcome.js:10 Getting my div
welcome.js:11 undefined
welcome.js:10 Getting my div
welcome.js:11 <div ref="myDiv" class="au-target"></div>
welcome.js:10 Getting my div
welcome.js:11 <div ref="myDiv" class="au-target"></div>
(continues)
die Ausdrucke wie th es geht endlos weiter. Sie können sehen, dass fullName()
wird regelmäßig aufgerufen, um den Bildschirm zu aktualisieren, wenn der Name ändert (ich nehme an, dies ist die Prüfung schmutzig) ... aber Sie können sehen, dass am Anfang gibt es einen Zeitraum, wenn die referenzierte div
ist nicht gültig als a Eigenschaft des View-Modells, und dann ist es gültig. Kann jemand das erklären? Gibt es eine Möglichkeit, in das View-Modell einzuhaken, nachdem die ref
gültig geworden ist?
nicht richtig, aber, sehr hilfreich! Es wies mich in die richtige Richtung. Ich musste den "attached" Callback verwenden, die beide in der [Docs] (http://aurelia.io/docs.html#extending-html) unter "HTML erweitern" aufgeführt sind. Gracias. – ntilwalli
Ich repariere es jetzt, bitte überprüfen Sie –
'angefügt' scheint nicht zu funktionieren, um ein Element innerhalb einer' repeat.for' zu referenzieren, wobei jedes Element 'ref =" 'currentElementInLoop.htmlElement" 'ist, außer ich mache es etwas stimmt nicht? Wenn ich 'setTimeout' innerhalb von' attached' installiere, funktioniert es jedoch. – powerbuoy