2017-08-16 40 views
0

我目前有包含一個計算一個別名模型,如下:Ember.js:從部件的javascript訪問計算別名

model: DS.belongsTo('device-model'), 
manufacturerName: Ember.computed.alias('model.manufacturer.name') 

我然後有時調用的組件,如下所示:

{{my-component model=model}} 

現在,在組件的Handlebars模板中,我可以使用{{model.manufacturerName}}輕鬆訪問計算屬性,但是在my-component.js中,我無法使其正常工作。我曾嘗試用:

console.log(this.get('model').get('manufacturerName')) 

然而,輸出爲undefined。到目前爲止,我可以從我-component.js得到製造商的名稱的唯一方法是:

this.get('model').get('model') 
.then((model) =>{ 
    return model.get('manufacturer') 
}) 
.then((manufacturer) => { 
    console.log(manufacturer.get('name')) 
}) 

所以,我想知道什麼是車把模板做,我不能在它的JavaScript對應呢?看起來Handlebars模板遵循承諾,而當涉及到組件的javascript時,我必須手動完成。

謝謝!

回答

-1

我認爲這個問題是因爲你的belongsTo關係。因爲{async:true}是Ember中關係的默認值。因此只有在您實際請求時纔會獲取相關實體。這意味着您的模型未加載,這意味着您的製造商名稱未加載,因爲它是model.manufacturerName.name的別名。

+0

感謝您的反饋意見。我明白你的意思,但問題是,爲什麼Handlebars模板可以訪問該屬性,但是它的JavaScript對應模塊卻不能?我必須在組件的JavaScript中做額外的步驟? – finferflu

+0

這很奇怪,我從來沒有遇到過這個。要麼他們都工作,要麼他們都不工作。我懷疑你的控制檯日誌是在加載模型「設備模型」之前發生的。並且hbs中的{{model.manufacturerName}}會刷新或加載。我會嘗試在您調用像this.store.findAll('device-model')這樣的組件之前在您的視圖的路線中加載'device-model', – feiiiiii

+0

我已經這麼做了,在我的視圖中,那。 – finferflu