2015-12-16 41 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}} 

这强制菜单组件重新呈现。