2012-12-13 95 views
0

當我目前使用emberjs建立一個應用程序,即時得到近completiion,但我與涉及到的應用程序視圖中的didInsertElement方法不一致一些。 下面是代碼:矛盾與emberjs和jQuery使用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的作品有時不是,它不清楚如何重現這個錯誤。

這是否與該文件的大小beign裝? 或者它是Ember運行循環或did插入元素方法的濫用?

任何人有一個線索?或者對正在發生的事情以及我可能如何解決這個問題有所暗示?

回答

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來展示你想要完成的簡化版本,我很樂意看看它。

+0

,在這裏我想的是,「一個AfterRender」運行循環隊列是SproutCore的 –

+0

AU恰恰相反,週一fraire的一些無用的遺物。事實上,它幾個月前剛剛添加到Ember! –

+0

@ sly7_7是的,這是你有時需要做的事情 –