当视图位于“preRender”中时,会触发emberjs didInsertElement
我有一些子视图,我在容器视图的didInsertElement事件中以编程方式推入容器视图。 然后,我们在didInsertElement事件期间对呈现的子视图DOM元素执行一些jQuery操作。 当我刷新页面时,此设置正常工作。 但是,当我通过链接转换到页面时,子视图的didInsertElement事件在它们处于“preRender”状态时以及插入到DOM之前被触发。
为什么在“preRender”期间会触发didInsertElement事件? 刷新页面时,什么会导致子视图行为的差异,而不是通过路由器转换到页面?
我不知道你为什么会收到这个问题,但有时候使用afterRender
队列解决了这个问题。
App.SomeView = Ember.ContainerView.extend({
didInsertElement: function() {
// here your view is in rendered state, but the child views no
Ember.run.scheduleOnce('afterRender', this, this._childViewsRendered);
},
_childViewsRendered: function() {
// here your child views is in the rendered state
}
});
当所有的渲染完成后,渲染队列会被执行,所以你的子视图有可能会处于inDOM
状态而不是preRender
。
我希望它有帮助
当你刷新时,dom被创建并且你的jquery动作/事件工作正常,当你转换到一个differenct页面并且通过url返回时,连接到dom的jquery事件/动作仍然存在,因此它们在呈现之前触发。
解决方案是在使用willDestroyElement从DOM中删除视图之后清理jQuery相关的东西:
App.MyAwesomeComponent = Em.Component.extend({
didInsertElement: function(){
this.$().on('click', '.child .elem', function(){
// do stuff with jQuery
});
},
willDestroyElement: function(){
this.$().off('click');
}
});
欲了解更多信息,请访问本教程
链接地址: http://www.djcxy.com/p/60815.html上一篇: emberjs didInsertElement is triggered when view is in "preRender"
下一篇: How to render multiple instances of the same view in a handlebars template