2016-07-16 55 views
1

我似乎無法鍛鍊如何在Ember中正確加載關係。用戶模型僅返回一些時間。如果我刷新頁面,似乎有50/50的機會值將爲空,否則它將正確解析。Ember並不總是加載belongsTo

我明白我在返回承諾是服務器對象(belongsTo結束用戶關係)的路線,但是如何告訴路徑等待用戶模型在加載頁面之前加載,或者當它最終加載用戶時,我如何告訴ember更新頁面上的數據?

我試着在afterModel鉤子裏玩RSVP,但沒有任何運氣。必須有一個明顯的解決方案呢?

路線

model(param) { 
    return this.store.findRecord('server', param.server_id); 
}, 

服務器模式

export default Model.extend(Validations, { 
    user: belongsTo('user'), 
}); 

用戶模型

export default Model.extend({ 
    displayName: attr('string'), 
    servers: hasMany('server'), 
}); 

組件

export default Ember.Component.extend({}); 

<div class="user-panel"> 
    <ul class="user-details"> 
     <li>owner:{{model.user.displayName}}</li> 
    </ul> 
</div> 

我讀到這裏類似的問題How to load belongsTo/hasMany relationships in route with EmberJS

但分量模板,我只返回一個對象,而不是一個數組我得到Array Methods must be provided an Array嘗試任何解決方案時拋出

服務器響應

{ 
    "data": { 
    "type": "server", 
    "id": "578aba694b08ce2310f36798", 
    "attributes": { 
     //removed 
    }, 
    "relationships": { 
     "jobs": { 
     "data": [ 
      { 
      "type": "jobs", 
      "id": "578aba694b08ce2310f3679a" 
      } 
     ] 
     }, 
     "user": { 
     "data": { 
      "type": "user", 
      "id": "57760677d04e0f11f4d3f7e5" 
     } 
     } 
    } 
    } 
} 
+0

時間可以挑剔密切相關的模型。如果你對API有控制權,我會建議將用戶和服務器一起加載。 – NicholasJohn16

回答

0

這應該工作開箱!不是等待的部分,而是自動更新。

結帳this旋轉。

但是,如果你想等待模式你可以強制執行此在afterModel鉤:

afterModel(model) { 
    return get(model, 'user'); 
} 
+0

是的,我也是這樣,它會在嵌套組件中結束的事實與它有什麼關係? –

+0

不是。只有當你不通過模型。更可能是您的API,序列化器或適配器存在問題。用燼檢員檢查你的狀態。通常的問題是,燼數據認爲它已經加載了記錄,或者關係不明確。 – Lux

+0

不幸的是,afterModel鉤子不起作用。使用inspect,我可以看到用戶模型'''isFulfilled:true'',但''content'''爲null。服務器正在返回用戶模型,並且,當數據從服務器返回時,ember正在發送對數據的請求,它看起來像時間已到,並且ember未更新其記錄。每次使用郵遞員查詢端點時,服務器都會正確響應。 –