これを解決するにはいくつかの方法があります
didInsertElement
これは、ビューが初めて挿入されたときに発生しますが、モデルがビューの下に切り替えられた場合は発生しません (DOM 全体を再構築するよりも安価であるため、Ember はアイテムを再利用するのが好きだからです)。以下の例。
単純
一度だけ行う必要がある場合は、ビューが初めて挿入されたときに使用しますdidInsertElement
App.FooView = Em.View.extend({
setupSomething: function(){
console.log('the dom is in place, manipulate');
}.on('didInsertElement')
});
例: http://emberjs.jsbin.com/wuxemo/1/edit
複雑
DOM がルート自体からレンダリングされた後に何かをスケジュールする必要がある場合は、それを使用してキューschedule
に挿入できます。afterRender
App.FooRoute = Em.Route.extend({
setupController: function(controller, model){
this._super('controller', model);
Ember.run.schedule('afterRender', this, function () {
//Do it here
});
}
});
例: http://emberjs.jsbin.com/wuxemo/2/edit
移行の約束
トランジションの promise は、アイテムのレンダリングが完了する前に完了します。しかし、すべてのモデルとコントローラーを取得して接続する作業が完了すると、フックが提供されます。
遷移イベントに接続したい場合は、次のように実行できます。
var self = this;
transitionTo('foo').then(function(){
Ember.run.schedule('afterRender', self, function () {
//Do it here
});
})