2017-01-22 48 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