2017-01-22 53 views
0

嗨,我想知道什么是正确的方式来更新路由组件上的属性?Emberjs如何从路由更新组件的属性?

什么我想要做一点背景:

我有我叫CardButtons两个自定义按钮(根据材料德兴)旁边的一个名为描述的空白区,我要的是创造一个悬停事件触发ajax调用来从数据库中检索详细数据并将其呈现在描述区域中。

检查更新

到目前为止,我已经创造了这样的路线:

export default Ember.Route.extend({ 

selectedModule: '', 

model: function() { 

    return { 
     selectedModule: 'employeeModule' 
    }; 
}, 


actions: { 

    showDescription: function (params) { 

     this.set('model.selectedModule', params); 

    } 

}}); 

我的路径模板调用我的组件是这样的:

<div class="row"> 
    {{sis-db-description-render idTitle=model.selectedModule}} 
</div> 

和组件定义像这样:

export default Ember.Component.extend({ 

info: null, 
ready: false, 

didInsertElement: function() { 

    this.queryData(); 


}, 

queryData: function(){ 
    /** Does an Ember.$.post request to the API with the idTitle as param**/ 
} 
}); 

这是第一次执行它完全加载细节数据,但是当我尝试刷新数据时事件不会触发第二个调用。我非常敬重,因为我没有以适当的方式更新模型。

关于如何更新组件属性的任何想法?

UPDATE:

感谢@kumkanillam我能找到我的路线上一种方法,我添加了下面的代码:

setupController: function (controller, model) { 

    this._super(...arguments); //if its new/index.js route file then you can use controller argument this method. 
    controller.set('selectedModule', 'employeeModule'); 
}, 


actions: { 

    showDescription: function (params) { 

     console.info(params); 
     this.controllerFor('new.index').set('selectedModule', params); 

    } 

} 

通过这样做,现在认为每次更新内容,我仍然不知道这是否是正确的方式,但它现在可行。

+0

'didInsertElement'将被称为初次单独渲染。 – kumkanillam

+0

我需要什么方法来更新?据我了解,如果我更新组件路线上的porperty组件应该重新渲染并调用didUpdateAttrs方法,但不是这种情况didUpdateAttrs永远不会被调用。 – DeividKamui

+0

其实你不更新。在路线'this.set('model.selectedModule',params);'这里模型是未定义的。它在控制器中定义。 – kumkanillam

回答

0

在下面的代码中,模型没有在路径中定义。它通过setupController挂钩在相应的控制器中定义。

showDescription: function (params) { 
    this.set('model.selectedModule', params); 
} 

所以你的情况要么你可以在控制器的动作定义和更新model.selectedModule
如果你想这样做的途径,

showDescription: function (params) { 
     let cont = this.controllerFor('route-name'); 
     cont.set('model.selectedModule', params); 
    } 
+0

只有一个问题,我读过的所有指南都说过你不能使用控制器,所以如果我使用它们,这会让我发疯? – DeividKamui

+0

没有东西,你可以很好地使用它。 https://github.com/emberjs/guides/pull/1762/files .. https://locks.svbtle.com/controllers-are-dead-long-life-controllers – kumkanillam

+0

好吧,让我先试试这个吧我使用ember g组件new/index(我的路由是一个索引路由),这应该生成一个控制器,然后? – DeividKamui