2017-01-26 1 views
3

In einem Versuch, einige Leistungsprobleme zu entdecken, die wir mit Aurelia auf IE 11 laufen, habe ich versucht, nur einen Timer zu protokollieren, um den Fortschritt zu verfolgen. Dabei habe ich während einer repeat.for Iteration merkwürdiges Verhalten bemerkt.Aurelia repeat.for Anruf Funktion mehrmals

<div repeat.for="i of 100"> 
    <div if.bind="lastElement(item, $last)">${$index}</div> 
</div> 

mit der Funktion und Umfang

var count = 0; 

lastElement(item, last){ 
    count++; 
    if(last === true){ 
     console.log('Last Item: ' + JSON.stringify(item)); 
     console.log(count); 
    }; 
    return true; 
}; 

... und mit folgendem Ergebnis:

Last Item: 99 
100 
Last Item: 99 
169 

Für mich ist das Ergebnis sein sollte:

Last Item: 99 
100 

Aus irgendeinem Grund gibt es mehrere Iterati ons oder Überprüfung dieser Funktion. Kann mir jemand erklären, was hier vor sich geht?

UPDATE: Ich konnte eine externe Datei von jdanyho finden und erstellen Sie eine Gist zu demonstrieren. Aber jetzt bekomme ich 150 statt 169. Hmmmm ...

+0

Ooh, du hast Recht. Es gibt 50 zusätzliche Anrufe, ich lösche meine Antwort. – slackmart

+0

Ich habe das gleiche Beispiel in local versucht ('" GET /jspm_packages/npm/[email protected] HTTP/1.1 "200') und funktioniert wie erwartet. Dies könnte helfen: https://github.com/gist-run/gist-run/issues/22 – slackmart

+0

Wir laufen lokal mit 1.0.8 und ich aktualisierte den Gist zu jdanyhos Quelldateien und gleichen Ergebnissen. – dbarth

Antwort

0

Die Funktion lastElement seinen Aufruf mehr Male, dass die Anzahl der itens, weil Sie eine Bindung mit der Funktion, und in diesem Fall aurelia Bindesystem tun ein Dirty Checking (hat einen Timer, um die Funktion aufzurufen, um zu sehen, ob sich der Wert geändert hat). Um eine fehlerhafte Prüfung zu vermeiden, können Sie den Decorator @computedFrom verwenden.

In diesem Fall für die Verwendung von Dekorator denke ich, dass Sie nicht Ihre Funktionslogik basierend auf dem letzten Parameter ausführen können, muss in Eigenschaften tun.

Es gibt viele Blog zu diesem Thema, aber Sie können den offiziellen Beitrag lesen: http://blog.aurelia.io/2015/04/03/aurelia-adaptive-binding/

Verwandte Themen