2013-08-04 8 views
8

So etwas wie Dokument fertig gemacht haben, aber nachdem alle Ember AnsichtenAusführen von Code einmal nach all Ansichten vollständig in Ember.js

Rendering ich dieses Recht jetzt mit einer Überschreibung auf ApplicationView didInsertElement, tue das so zu sein scheint zu funktionieren weit:

App.ApplicationView = Em.View.extend({ 
    didInsertElement: function() { 
    // Do your magic. 
    } 
}); 

ich frage mich, ob dies der richtige Weg für ein Ember Dokument fertig ist, oder wenn Ember hat eine native Unterstützung für diese einfache und sehr gewöhnliche Sache.

Antwort

5

Die didInsertElement ist der richtige Ort, aber wenn Sie Warteschlange ganz sicher, dass Ihr machen zu wollen ist komplett gespült Sie auch an der afterRender Ereignis, so etwas wie das hören könnte:

App.ApplicationView = Ember.View.extend({ 
    didInsertElement: function() { 
    Ember.run.scheduleOnce('afterRender', this, 'processChildElements'); 
    }, 

    processChildElements: function() { 
    // do here what you want with the DOM 
    } 
}); 

Hoffe, es hilft.

+3

Eigentlich ApplicationView scheint nicht der richtige Ort zu sein, ist es für die erste Anforderung funktioniert, aber wenn Sie beginnen andere Vorlagen danach Rendering , der Haken feuert nicht. Ich habe didInsertElement für die bestimmte Ansicht definiert, in der ich Code nach dem Rendern ausführen möchte, und das funktioniert gut, aber es wäre schön, wenn Ember nach jedem Rendering einen generischen Hook für jeden Übergang hätte. – clueless

+0

@clueless, Sie erwähnten '$ (document) .ready' also ja'ApplicationView' ist für die erste Anfrage, für alle anderen Ansichten müssen Sie das gleiche tun, denke ich, wie Sie bereits kommentiert. Soweit ich weiß, gibt es keinen integrierten Hook für wenn alle Ansichten gerendert werden. – intuitivepixel

+0

@clueless Es gibt kein Äquivalent für '$ (document) .ready', da dies zu einem globalen Spaghetti-Code führen würde. Sie sollten Ihre jQuery-Logik in die Ansicht einfügen, die am besten zu der Aufgabe passt. – mavilein

10

Sie können problemlos einen "Post-Render" -Hook hinzufügen, indem Sie die Basis-View-Klasse erneut öffnen und in die Render-Warteschlange einfügen.

Hier einige Code, den Sie zu zeigen, wie:

Ember.View.reopen({ 
    didInsertElement : function() { 
     this._super(); 
     Ember.run.scheduleOnce('afterRender', this, this.didRenderElement); 
    }, 
    didRenderElement : function() { 
     // Override this in your View's 
    } 
}); 
+0

Dies ist ein Schritt in die richtige Richtung. Zurzeit versuche ich Javascript nach jeder Umstellung oder Aktualisierung auf dem Render der Seite laufen zu lassen. Ich habe versucht, meinen jquery-Block in willTransition, didTransition und die Vorher-Nachher-Modell-Haken in der Anwendungsroute ohne Glück. Irgendwelche Ideen? – genkilabs

0
App.ApplicationView = Ember.View.extend({ 
    afterRender: function() { 
    Ember.run.next(this, function() { 
     // This will run one time, after the full initial render. 
    }); 
    } 
}); 
Verwandte Themen