首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当视图在"preRender“中时触发preRender

当视图在"preRender“中时触发preRender
EN

Stack Overflow用户
提问于 2013-10-27 20:13:31
回答 2查看 3.9K关注 0票数 0

我有一些子视图,是在容器视图的didInsertElement事件期间以编程方式推入容器视图的。然后,在呈现的子视图DOM元素的didInsertElement事件中执行一些jquery操作。当我刷新页面时,此设置工作正常。但是,当我通过链接切换到页面时,子视图的didInsertElement事件在处于"preRender“状态时以及在插入到DOM之前都会被触发。

为什么didInsertElement事件会在"preRender“期间触发?当刷新页面而不是通过路由器转换到页面时,什么会导致子视图行为上的差异?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-27 20:20:44

我不知道您为什么会收到这个问题,但有时使用afterRender队列可以解决这个问题。

代码语言:javascript
复制
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状态。

我希望它能帮上忙

票数 2
EN

Stack Overflow用户

发布于 2015-02-26 08:17:45

当您刷新时,dom会被创建,您的jquery操作/事件可以正常工作,当您转换到一个不同的页面并通过url返回时,附加到dom的jquery事件/操作仍然存在,因此它们在呈现之前会触发。

解决方案是在使用willDestroyElement从DOM中删除视图后清除jquery相关内容:

代码语言:javascript
复制
App.MyAwesomeComponent = Em.Component.extend({
    didInsertElement: function(){
       this.$().on('click', '.child .elem', function(){
       // do stuff with jQuery
      });
},
    willDestroyElement: function(){
this.$().off('click');
}
});

有关此问题的更多信息,请访问此教程

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19622988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档