2012-04-27 6 views
6

Ein Problem mit einem Spinner, der sich tatsächlich dreht, während ember.js es tut. Ich habe ein sehr allgemeines jsfiddle Beispiel, das das Problem veranschaulicht:Animierte GIF-Pausen, wenn Objekte von ember.js geladen werden

http://jsfiddle.net/h4ZcZ/2/

ich da sein übernehmen hat eine einfache Möglichkeit, diese Arbeit wie erwartet zu machen, aber ich finde es nicht. Ich habe versucht, eine JavaScript/CSS-Implementierung eines Spinner (spin.js) mit den gleichen Ergebnissen zu verwenden. Ich sah ein paar Sachen, die darauf hinweisen, dass dies normalerweise ein IE-Problem war, aber das ist hier nicht der Fall. Dies geschieht in allen Browsern unter Windows und ich habe auch auf Mac Safari getestet.

+0

Wie viele Artikel sind in Ihrer Sammlung? –

+0

50 Elemente in der Sammlung, die ein Ember.js-Objekt ist. Jedes Objekt enthält ein Array von anderen Objekten mit insgesamt 6 Objekten. – BrianB

Antwort

1

Das Problem ist Ihre for-Schleife - Sie sperren im Grunde den Thread. Ich würde Timeouts verwenden und die Arbeit aufteilen, um anderen Verarbeitungsanforderungen auf der Seite die Ausführung zu ermöglichen.

+0

Die Array-Iteration ist nicht die große Zeit hier saugen (oder zumindest ist es nur ein Teil des Problems). Embers lesslebars.js-Implementierung durchläuft den itemsController mit dem Tag {{#each}}. Ich habe mit setTimeout und [Nick Fitzgeralds Patterns] (http://fitzgeraldnick.com/weblog/35/) nachgiebigen Mustern nachgeschaut, aber das wird nur beim Laden von Elementen in den Controller helfen, nicht bei Embers Aktualisierung des DOM, das in Mein spezieller Fall ist, wo der Löwenanteil der Thread-Verriegelung passiert. – BrianB

+0

Ah, guter Punkt. Das macht viel mehr Sinn. –

1

Was die Ursache angeht, ist @ChristopherSwasey korrekt. Ich habe ein paar andere Ember-Entwickler danach gefragt. Keine Lösung, aber zwei interessante Gedanken, die helfen könnten:

1) Ein Entwickler berichtete, dass er auf dieses Problem gestoßen ist und sich darum gekümmert hat, indem er sichergestellt hat, dass das animierte GIF vor der langen JavaScript-Ausführung gestartet wurde.

2) Ein anderer Entwickler schlug vor, dass die Verwendung einer virtualisierten Liste der richtige Pfad ist, so dass nur sichtbare Knoten gerendert werden. Ich fürchte jedoch, dass ich noch keine quellvirtualisierte Open-Source-Listen-Klasse kenne.

Hoffe, dass hilft.

+0

Laden der Gif vor den DOM-Updates von Ember hat keine Auswirkungen für mich. Hat auch keinen Einfluss auf das Beispiel der js fiddle. – BrianB

Verwandte Themen