有几种不同的方法可以解决这个问题
插入元素
这在第一次插入视图时触发,但如果在视图下切换模型则不会触发(因为 Ember 喜欢重用项目,因为它比重建整个 DOM 便宜)。下面的例子。
简单的
如果你只需要做一次,第一次插入视图时,使用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
过渡承诺
过渡的承诺将在完成渲染项目之前完成。但是当它完成获取所有模型和控制器并将它们连接起来时,它会给你一个钩子。
如果你想连接到过渡事件,你可以这样做:
var self = this;
transitionTo('foo').then(function(){
Ember.run.schedule('afterRender', self, function () {
//Do it here
});
})