2017-09-16 61 views
0

我對Ember數據有一定的懷疑。 我有一個帖子和評論模型。Ember數據中的加載關係模型

//post.js 
comments: DS.hasMany('comment') 

//blog.js 
post: DS.belongsTo('post') 

我可以創建一個特定的「郵報」用

let blogPost = this.get('store').findRecord('post', 1); 
let comment = this.get('store').createRecord('comment', { 
    post: blogPost 
}); 

一個評論但我怎麼能獲取特定職位的所有意見? 一樣,我有多個職位其中有很多評論,我想對於一個特定的文章ID的所有評論,說帖/ ID /評論

什麼是獲取從一個特定的文章ID的評論的正確方法商店和服務器?

我得到的服務器響應僅僅是評論的id,而「findRecord」是帖子。 我遵循REST API格式並使用REST適配器和REST序列化程序進行定製。

在此先感謝。

回答

1

有很多方法可以將這些記錄加載到商店中。你如何選擇這取決於後端的設置方式。最簡單的選項是在模板中使用子記錄,或者進行查詢。以下說明僅適用於使用REST適配器的應用程序(因爲JSONAPI請求已標準化)。

讓我們開始在模板中使用記錄。

在路線,獲取職位,並在模型鉤回吧:

// post.js route  
import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model(params) { 
    return this.store.findRecord('post', params.post_id) 
    }, 
}); 

傳遞模型及其子記錄到一個組件:

// post.hbs route template 
{{some-component comments=model.comments}} 

然後使用該評論組件:

{{#each comments as |comment|}} 
    <p>{{comment.note}}<p> 
{{/each}} 

您應該發現使用模板中的註釋會觸發GET請求該回來了您的初始後取的ID,如/comments/1/comments/2等在組件的操作,您可以訪問評論爲this.get('comments')

另一種方法是指定要接收和處理的查詢參數後端。

// post.js route  
import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model(params) { 
    return this.store.query('comments', {post: params.post_id}) 
    }, 
}); 

上面的代碼會對/ comments?post = 1發出GET請求。後端負責通過數據庫進行過濾並僅返回屬於該帖子的記錄。由於模型是一系列評論,所以您可以在模板中使用上述結果:

{{#each model as |comment|}} 
    <p>{{comment.note}}</p> 
{{/each}} 
+0

只是想告訴你,你的答案很好,有詳細的解釋。請保持好的工作狀態。 – kumkanillam

+0

謝謝,我想請求評論,post/postID /評論不像上面提到的。是否有可能自然而然地請求適配器而不使用任何定製? – Mohanesh

+0

不,你需要製作一個適配器並覆蓋urlFor來做嵌套的url。另一個選擇是使用像https://github.com/amiel/ember-data-url-templates這樣的插件 – handlebears