在所有视图在Ember.js中完全呈现后执行一次代码

在所有视图在Ember.js中完全呈现后执行一次代码,ember.js,Ember.js,类似于文档就绪,但毕竟是余烬视图渲染 我现在正在通过对ApplicationView didInsertElement的覆盖来实现这一点,到目前为止,它似乎还在工作: App.ApplicationView = Em.View.extend({ didInsertElement: function() { // Do your magic. } }); 我想知道这是否是准备好Ember文档的正确方法,或者Ember是否对这个简单且非常常见的东西有更原生的支持 didInsert

类似于文档就绪,但毕竟是余烬视图渲染

我现在正在通过对ApplicationView didInsertElement的覆盖来实现这一点,到目前为止,它似乎还在工作:

App.ApplicationView = Em.View.extend({
  didInsertElement: function() {
    // Do your magic.
  }
});

我想知道这是否是准备好Ember文档的正确方法,或者Ember是否对这个简单且非常常见的东西有更原生的支持

didInsertElement是正确的位置,但如果您想完全确保渲染队列已完全刷新,也可以侦听
afterRender
事件,如下所示:

App.ApplicationView = Ember.View.extend({
  didInsertElement: function() {
    Ember.run.scheduleOnce('afterRender', this, 'processChildElements');
  },

  processChildElements: function() {
    // do here what you want with the DOM
  }
});
希望有帮助。

通过重新打开基本视图类并将其添加到渲染队列中,可以轻松添加“后期渲染”挂钩

下面是一些代码,向您展示如何:

Ember.View.reopen({
    didInsertElement : function() {
        this._super();
        Ember.run.scheduleOnce('afterRender', this, this.didRenderElement);
    },
    didRenderElement : function() {
        // Override this in your View's
    }
});

实际上,ApplicationView似乎不是正确的位置,它适用于第一个请求,但是当您在之后开始呈现其他模板时,钩子不会启动。我在特定视图上定义了didInsertElement,我想在渲染后执行代码,这很好,但如果Ember在每次转换中都有一个通用的钩子用于渲染后的所有视图,那就太好了。@Unless,您提到了
$(文档)。ready
,所以yes
ApplicationView
适用于第一个请求,对于所有其他视图,我想您也需要这样做。据我所知,在呈现所有视图时没有内置钩子。@对于
$(document).ready
,没有等效的钩子,因为这样会产生全局意大利面代码。您应该将jQuery逻辑放入视图中,这最适合任务。这是朝着正确方向迈出的一步。目前,我正在尝试在任何转换或刷新后在页面的呈现上运行javascript。我尝试将jquery块放入willTransition、didTransition以及应用程序路径中的前后模型挂钩,但没有成功。有什么想法吗?
App.ApplicationView = Ember.View.extend({
  afterRender: function () {
    Ember.run.next(this, function () {
      // This will run one time, after the full initial render.
    });
  }
});