2016-12-19 3 views
2

Also schreibe ich diese Aurelia-Anwendung und eine Sache ärgert mich sehr. Sagen, dass ich eine benutzerdefinierte Komponente wie folgt definiert haben:Code nur ausführen, wenn alle Bindungen fertig sind

export class CustomComponent { 
    @bindable callbackForSomething; 
    @bindable anotherCallback; 
} 

Jetzt ein paar Fälle, ich habe, wo ich noch mehr Funktionen binden (oder auch nur irgendetwas anderes) auf meine Komponente. Also in jeder Komponente habe ich Code wie folgt:

callbackForSomethingChanged() { 
    this._tryRunComponent(); 
} 

anotherCallbackChanged() { 
    this._tryRunComponent(); 
} 

_tryRunComponent() { 
    if (!this.callbackForSomething || !this.anotherCallback) { 
     return; 
    } 

    // run some logic here when I know the component is ready 
} 

Hat AureliaJS etwas, um dies zu erleichtern? Mit nur zwei Eigenschaften ist es nervig, aber ich habe Komponenten, die viel mehr Eigenschaften deklarieren.

+0

Ich benutze Aurelia nicht, aber von einem allgemeinen JS Standpunkt aus sieht es wie eine gute Zeit aus, Promises zu verwenden. Werfen Sie einen Blick auf die Verwendung von 'Promise.all()', um nur fortzufahren, nachdem jede Bindung aufgelöst wurde. – gelliott181

Antwort

4

Fügen Sie Ihrem Ansichtsmodell eine bind-Methode hinzu. Es wird von Aurelia aufgerufen, sobald alle bindbaren Eigenschaften zugewiesen wurden.

Nachfolgende Änderungen an den bindbaren Eigenschaften lösen Ihre *Changed Methoden aus.

+0

Awwww, verdammt! Ich wusste, dass diese FW so etwas haben muss. Vielen Dank! –

Verwandte Themen