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で追加されたキューでアクションをスケジュールできます。すなわち

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

これは、を置き換えることになります。これは、ハンドラーEmber.run.nextではめったに良い考えではありません。didInsertElement

さらに、didInsertElementハンドラー内では、ほとんどの場合this.$()、グローバルではなく、スコープ付きのjQueryセレクターを使用する必要があります$

これらの2つのヒントの間で、物事を一貫して機能させることができるはずです。できない場合は、達成しようとしていることの簡略化されたバージョンを示すJSFiddleを作成できます。喜んで見ていきます。

于 2012-12-14T12:26:42.930 に答える