当视图位于“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