使用didInsertElement时与emberjs和jquery不一致

Lun*_*kzx 0 javascript jquery ember.js

我目前正在使用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>");
            });
         });
    },
Run Code Online (Sandbox Code Playgroud)

问题是,即使我没有使用Ember.run.next,应用程序视图反应也不一致.我只是想在我的视图中修改内容.有时jquery工作有时它不是,并且不清楚如何重现这个bug.

它是否与加载文件的大小有关?或者是滥用Ember运行循环还是插入元素方法?

有人提到了吗?或暗示正在发生的事情以及我可能会做些什么来解决这个问题?

Luk*_*lia 5

didInsertElement被称为保证您的视图的元素被添加到DOM.如果您还想保证已添加视图的子视图,则可以在afterRender队列上安排操作,此操作已添加到此处.即

Ember.run.scheduleOnce('afterRender', this, function(){
    // do something when my view hierarchy has been rendered
});
Run Code Online (Sandbox Code Playgroud)

这将取代Ember.run.next,这在didInsertElement处理程序中很少是一个好主意.

此外,在didInsertElement处理程序中,您应该几乎总是使用作用域jQuery选择器this.$(),而不是全局$.

在这两个提示之间,你应该能够让事情始终如一.如果你不能,你可以创建一个JSFiddle,显示你想要完成的简化版本,我很乐意看看它.