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

时间:2013-08-04 22:49:14

标签: ember.js

像文件准备好的东西,但毕竟是Ember视图渲染

我正在使用ApplicationView didInsertElement上的覆盖来执行此操作,这似乎是迄今为止的工作:

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

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

3 个答案:

答案 0 :(得分:10)

您可以通过重新打开基本View类并将其添加到渲染队列中来轻松添加“post render”挂钩。

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

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

答案 1 :(得分:5)

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
  }
});

希望它有所帮助。

答案 2 :(得分:0)

var myArray=["string1","string2","string3","string4","string5"];
var test = document.querySelector(".test")
myArray.forEach(function(x){
var textnode = document.createTextNode(x);
test.appendChild(textnode )
})