2015-12-16 254 views
0

我有一個組件帶有一個可以轉換DOM的jquery菜單。我需要重新渲染組件以重新啓動結構。 jquery菜單不起作用,所以我需要重新渲染組件。Ember重新渲染組件

//Parent Component hbs 
<div id="container"> 
    {{menu-jquery model=model}} 
</div> 

//Parent Component js 
export default Ember.Component.extend({ 

    refreshMenuData(){ 
     callToServer()// ajax call 
     updateModel()// generate model from ajax response 

     -> //how to delete and create menu component? or re render menu component? 
    } 
} 

感謝

回答

0

你的問題不是很清楚。我假設你將在組件內部使用jquery ajax進行服務器調用。在Ember.Component中,您必須使用.on(「didInsertElement」),其工作方式與jQuery(document).ready()類似。因此,您的組件將是這個樣子

export default Ember.Component.extend({ 
    _onReady: function() { 
     refreshMenuData(); 
     //whatever jquery code you want to execute here 
    }.on('didInsertElement') 
}) 

如果您可以提供的灰燼撫弄或JSBin你的榜樣,我可以幫你更好的。

+0

對不起,我發現問題是jquery插件的konw問題,所以我需要刪除並創建整個組件。 –

1

組件有一個叫做rerender的函數,您可以調用該函數強制組件的rerender。雖然,我可能會推薦一個更好的方法。在解析提取服務器數據的承諾後,手動銷燬jquery插件,然後重新啓動該插件。

+0

謝謝,我如何在代碼中獲取組件引用來調用渲染器方法? –

+1

'this.rerender()' – sunrize920

+0

調用rerender不會改變任何東西,我發現一個解決方法將組件放在{{#unix loading}}塊中,並在服務器調用之前設置加載true。這迫使菜單組件重新渲染。 –

0

我發現了一個解決方案,將組件放入一個條件塊中。在服務器調用之前,我將false設置爲false,數據分析後設置爲true。

{{#if loading}} 
    // show loading message 
{{else}} 
    {{menu-jquery model=model}} 
{{/if}} 

這強制菜單組件重新呈現。