2017-11-15 3 views
0

Ich habe eine einfache Frage, weil ich dies nach langer Suche nicht gefunden habe.Polymer - dom-repeat wenn Ende Bindungsereignis?

Szenario:

Wenn eine Komponente geladen ist, mache ich AJAX-Aufruf von einer API-Daten zu erhalten. Nachdem der Aufruf beendet ist, lege ich Daten in eine Eigenschaft, die für dom-repeat verwendet wird. Nach dom-repeat beendet Rendering möchte ich einige Operation auf Elemente in ihm tun. Read() wird aufgerufen, bevor der AJAX-Anruf beendet wird. Gibt es andere Möglichkeiten, damit umzugehen?

Antwort

2

dom-repeat wird dom-change Ereignis ausgelöst, nachdem es DOM-Struktur aktualisieren.

So können Sie so etwas wie

<template is='dom-repeat' items='[[items]]' on-dom-change='doSomething'> 
    ... 
</template> 

Siehe in document tun.

+0

Es funktioniert ... Aber es ist 50 mal gefeuert (in meinem Fall). für jede einzelne Iteration der Vorlage. Kein Problem, wenn die Anzahl der Zeilen niedrig ist, aber es kann problematisch sein, wenn die Anzahl der Zeilen größer wird. – Boyak

+0

Es ist komisch! Ich denke, es sollte einmal sein (nicht sicher). Ich erschaffe auch einen [hier] (https://plnrkr.co/edit/P3B7hxMSihqTVh7hK0lt?p=preview). Es wird nicht für jede Iteration ausgelöst. –

2

Sie können ein dom-change Ereignis und ein debounce verbinden, um zu bekommen, was Sie wollen.

<template is='dom-repeat' items='[[items]]' on-dom-change='_handleDomChangeEvent'> 
... 
</template> 

... 

_handleDomChangeEvent: function() { 
    this.debounce('domEndEvent', function() { 
    // dom-repeat has finished rendering 
    }, 100) 
} 

Dies kann spröde angesehen werden - wenn dom-change Ereignisse zwischen Spannweiten von mehr Feuer als 100ms die Debouncer zweimal ausgelöst. Aus praktischen Gründen ist es jedoch unwahrscheinlich, dass eine DOM-Änderung so lange dauert.

+1

Interessantes über 'debounce'! Vielen Dank. –

Verwandte Themen