0

我目前正在使用 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 工作,有时它不是,并且不清楚如何重现这个错误。

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

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

4

1 回答 1

5

didInsertElement被调用时,您可以保证视图的元素已添加到 DOM。如果您还想保证视图的子视图也已添加,您可以在afterRender队列上安排一个操作,该操作已添加到此处。IE

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

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

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

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

于 2012-12-14T12:26:42.930 回答