我目前正在使用emberjs构建一个应用程序,即将完成,但我有一些与应用程序中的视图相关的didInsertElement方法相关的不一致。 这是代码:
didInsertElement : function(){
Ember.run.next(this,function(){
var sub = this.$(document).find('.sub_t');
$(sub).not('button').siblings('.inside').toggle();
$(sub).each(function(i){
$(this).attr('id','s_t' + i + '');
var s_t = $(this).nextUntil(".sub_t");
$(s_t).not('button').wrapAll("<div class='s_t" + i + "'></div>");
});
});
},
问题是,即使我没有使用Ember.run.next,应用程序视图反应也不一致。我只是想在我的视图中修改内容。有时jquery工作有时它不是,并且不清楚如何重现这个bug。
是否与加载文件的大小有关? 或者是滥用Ember运行循环还是插入元素方法?
有人对此有所提示吗?或暗示正在发生的事情以及我可以做些什么来解决这个问题?
答案 0 :(得分:5)
调用didInsertElement
时,可以保证视图的元素已添加到DOM中。如果您还想保证已添加视图的子视图,则可以在afterRender
队列上安排一个操作,该队列已添加here。即。
Ember.run.scheduleOnce('afterRender', this, function(){
// do something when my view hierarchy has been rendered
});
这将取代Ember.run.next
,这在didInsertElement
处理程序中很少是一个好主意。
此外,在didInsertElement
处理程序中,您几乎应该始终使用作用域jQuery选择器this.$()
,而不是全局$
。
在这两个提示之间,你应该能够让事情始终如一。如果你不能,你可以创建一个JSFiddle,显示你想要完成的简化版本,我很乐意看到它。