嘿@petkopalko,从你在评论中所说的你想将 Holder.js 用于占位符图像,就像你说的那样,由于 holder.js 的工作方式,你需要执行 Holder.run() 函数。您可以做的是将 Holder.run() 添加到每个需要它的视图中, didInsertElement
但这不是您想要做的,而且可能会让人厌烦。
现在从您上面的代码中,使用 Ember App Kit (EAK) 和解析器,我认为您实际上在做什么:
export default Ember.View.extend({...
从内部app/views/application.js
实际上是导出与 ApplicationView 关联的视图,这就是为什么它只会执行一次,因为应用程序视图会在页面加载时插入。
我正在做一些黑客攻击,似乎有效的是你必须重新打开 Embers 视图类(对象)并将 holder.run 添加到didInsertElement
钩子中。在 EAK 中重新打开 Ember 基类似乎对我最有效的是在app.js
文件中执行此操作。
app.js
在文件中看起来像这样:
Ember.View.reopen({
didInsertElement: function(){
Ember.run.next(function(){
Holder.run();
}
}
});
它似乎只适用于 ember.run
Ember.View.reopen({
didInsertElement: function(){
Ember.run(function(){
Holder.run();
}
}
});
如果您愿意,您可以保留之前的所有代码,只需将其放入app.js
Ember.View.reopen({
didInsertElement : function(){
this._super();
Ember.run.scheduleOnce('afterRender', this, this.afterRenderEvent);
},
afterRenderEvent : function(){
// implement this hook in your own subclasses and run your jQuery logic there
console.log("FIREEEEE");
//You can place the holder.run() function here and not in views
Holder.run();
}
});
如果您没有在重新打开视图的 afterRenderEvent 函数中放置 Holder.run()。您必须将其放置在您似乎想要的 afterRenderEvent 函数的视图中。
SomeView = Ember.View.extend({
afterRenderEvent: function() {
this._super();
Holder.run();
}
});
不确定这些方法的副作用,但您可以在实施后探索它们。所以你有几个选择:快乐编码。
此处附加的是一个 jsbin,它似乎说明了我认为您正在寻找的行为:
http://emberjs.jsbin.com/medamata/6/edit