2016-05-23 10 views
-1

Ich habe eine Ansicht mit Button und Event-Handler auf Knopfdruck, der API aufruft und zu einer anderen Ansicht umleitet. Ich möchte diese Schaltfläche deaktivieren, wenn ein Ereignisklick ausgelöst wird.Wie kann man Echtzeit-Bindungsverhalten in Aurelia bereitstellen?

Wenn ich Aurelia Bindung verwenden

<button disabled.bind="loading" type="button" click.delegate="click()">Push</button> 

und setzen

click() { 
    this.loading = true; 
    doSomeWork(() => this.loading = false); 
} 

Taste noch einige Zeit aktiviert ist und ein Benutzer auf diese Schaltfläche erneut klicken konnte.

Ich habe eine kleine Abhilfe verwendet, die nicht sehr gut aussieht.

Fabrikat ref für Button mit Zwei-Wege-Bindung

<button ref="button" disabled.two-way="loading" type="button" click.delegate="click()">Push</button> 

Dann explizit deaktivieren ich für Schaltfläche.

click() { 
    this.button.disabled = true; 
    doSomeWork(() => this.loading = false); 
} 
+0

Wie ich verstehe doSomeWork (() => this.loading = false && doSomeWork() => {.... doing ...})); Sie wana falsch in der zweiten doSomeWork wahr zu sein. Falsch kann auf diese Weise nicht wahr sein. Alles in Ordnung mit Aurelia –

Antwort

1

Das liegt wahrscheinlich daran, dass die Aurelia-Bindung Mikroaufgaben verwendet, die langsamer sind als das DOM. Anstatt das DOM in Ihrem Code zu manipulieren, sollten Sie den Status Ihrer 'loading'-Eigenschaft überprüfen.

+0

Ja, klingt gut, danke :) – take5v