3

我需要在每次 ember.js 视图渲染后运行一个函数。我最初的想法是在页面准备好后运行我的函数,但任何视图更改都不受我函数中的 DOM 操作的影响。每次 ember 渲染视图或重新渲染视图时,有没有一种方法可以绑定到事件(或触发触发器)?

4

1 回答 1

5

您可以挂钩didInsertElement并在那里进行所有 DOM 操作:

例如:

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

  processChildElements: function() {
    // do here any DOM manipulatins
  }
});

编辑以回应您的最后评论

如果你不想didInsertElement在每个视图的基础上挂钩,你总是可以更深入地挖掘框架和reopenEmber.View,并挂钩到render函数中,然后在调用之后this._super(buffer);让视图可以完成它的工作,甚至拦截renderBuffer你将您的自定义代码放在那里:

Ember.View.reopen({
  render: function(buffer) {
    this._super(buffer);
    // do funny stuff ...
    console.log(this.get('elementId'));
  }
});

有关示例,请参见此处(检查控制台)。

希望能帮助到你。

于 2013-08-08T12:07:10.357 回答