我需要在每个ember.js视图渲染后运行一个函数.我最初的想法是在页面准备好后运行我的函数,但任何视图更改都不受我的函数中DOM操作的影响.有没有一种方法可以在每次渲染视图或重新渲染视图时绑定到事件(或导致触发器)?
解决方法:
您可以挂钩到didInsertElement并执行所有DOM操作:
例如:
App.MyView = Ember.View.extend({
didInsertElement: function() {
Ember.run.scheduleOnce('afterRender', this, 'processChildElements');
},
processChildElements: function() {
// do here any DOM manipulatins
}
});
根据您的上次评论进行修改
如果你不想在每个视图的基础上挂钩到didInsertElement,你可以随时深入挖掘框架并重新打开Ember.View
类,并挂钩到render函数,然后调用this._super(buffer);这样视图就可以完成它的工作,甚至可以截取你放置自定义代码的renderBuffer:
Ember.View.reopen({
render: function(buffer) {
this._super(buffer);
// do funny stuff ...
console.log(this.get('elementId'));
}
});
有关示例,请参阅here(检查控制台).
希望能帮助到你.