我遇到了丑陋的计时问题(竞争条件),并且在didInsertElement()中使用jQuery执行基于高度计算的布局。
例如,我通过$('header.someClass').outerHeight(true);
计算标题的高度,然后我使用结果从顶部偏移内容区域。如果我通过重新加载整个页面来全新渲染视图(它在我的示例中为60px),但是如果我从另一个视图导航到视图,则会因为返回错误的高度而失败(在我的示例中为6px)。
要证明这是一个时间问题:如果我将代码包装在:
Em.run.later(function() {
...do layout
}, 50);
有用。
我认为这是一个严重的问题,因为Ember中没有其他钩子,我可以附加。
答案 0 :(得分:1)
相反,您应该安排jQuery逻辑在渲染后运行:
App.YourView = Ember.View.extend({
didInsertElement : function(){
this._super();
Ember.run.scheduleOnce('afterRender', this, function(){
// perform your jQuery logic here
});
}
});
在我的blog中找到更多信息和解释。
答案 1 :(得分:0)
听起来你可能会对ember的工作方式有一点误解。
将特定视图注入dom时触发didInsertElement,而不是当所有元素都在dom中时。注意:如果它后面的模型发生变化,ember将不会再次触发didInsertElement,因为它没有重新插入到dom中。
如果延迟时它起作用,那么听起来你计算某物的大小的逻辑取决于那些可能不存在的东西。
使用emberjs.jsbin.com随时展示它的一个例子。