有几种不同的方法可以解决这个问题
插入元素
当第一次插入视图时会触发此事件,但如果在视图下切换模型则不会触发此事件(因为 Ember 喜欢重用项目,因为它比重建整个 DOM 更便宜)。下面的例子。
Simple
如果您只需要执行一次,即第一次插入视图时,请使用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 http://emberjs.jsbin.com/wuxemo/1/edit
Complex
如果你需要在 DOM 从路由本身渲染之后安排一些事情,你可以使用schedule
并将其插入afterRender
queue.
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 http://emberjs.jsbin.com/wuxemo/2/edit
过渡承诺
过渡的承诺将在完成渲染项目之前完成。但是,当完成获取所有模型和控制器并将它们连接起来时,它为您提供了一个钩子。
如果你想连接到转换事件,你可以这样做:
var self = this;
transitionTo('foo').then(function(){
Ember.run.schedule('afterRender', self, function () {
//Do it here
});
})