在Ember页面上查看the guide,我无法弄清楚如何在一对多关系中连接模型。
App.Post = DS.Model.extend({
comments: DS.hasMany('comment')
});
App.Comment = DS.Model.extend({
post: DS.belongsTo('post')
});
1。如何定义灯具? A或B或其他东西
A)每个帖子'对象'中的评论
App.Post.FIXTURES = [
{
id:1,
title:"hello world",
body:"hey ho",
comments:[
{
text: "Very nice"
},
{
text: "Very nice indeed"
},
]
},
{
id:2,
title:"hello again",
body:"I'm Bob",
comments:[{
text: "Pretty cool actually"
}]
}
]
B)单独评论并与ID链接到帖子
App.Post.FIXTURES = [
{
id:1,
title:"hello world",
body:"hey ho"
},
{
id:2,
title:"hello again",
body:"I'm Bob"
}
]
App.Comment.FIXTURES = [
{
post_id:1,
text: "Very nice"
},
{
post_id:1,
text: "Very nice indeed"
},
{
post_id:2,
text: "Pretty cool actually"
}
]
2。关于从服务器获取
A)我是否需要单独加载帖子和单独评论,或者在一次通话中全部加载,如果它们的结构与1A情况一样?
B)如果我想单独播放它们,例如等待用户点击ok评论链接,除非用户请求,否则无需为页面上的每个博客帖子下载1000条评论。
您能否提供一个简单的版本,了解每个电话的外观?
答案 0 :(得分:4)
<强> 1。如何定义灯具?别的。
正确的表单是将{id'作为comments
的{{1}}属性嵌入。
post
<强> 2。从服务器获取
有几种方法可以解决这个问题。
使用“侧面装载”。您仍然提供注释ID列表作为App.Post.FIXTURES = [
{
id:1,
title:"hello world",
body:"hey ho",
comments : [1,2]
},
{
id:2,
title:"hello again",
body:"I'm Bob",
comments : [3]
}
]
App.Comment.FIXTURES = [
{
id : 1,
text: "Very nice"
},
{
id : 2,
text: "Very nice indeed"
},
{
id : 3,
text: "Pretty cool actually"
}
]
属性,但您还在JSON响应中包含注释列表。
comments
在{posts:[
{
id:1,
title:"hello world",
body:"hey ho",
comments : [1,2]
},
{
id:2,
title:"hello again",
body:"I'm Bob",
comments : [3]
}
],
comments : [
{
id : 1,
text: "Very nice"
},
{
id : 2,
text: "Very nice indeed"
},
{
id : 3,
text: "Pretty cool actually"
}
]}
上使用async
,允许Ember在帖子加载后查找评论。
hasMany
如果您有数千条记录,则上述解决方案不会太好。而不是一次加载所有注释(使用侧面加载或App.Post = DS.Model.extend({
comments: DS.hasMany('comment',{async:true})
});
),您将希望使用分页一次只加载一些注释。在这种情况下,您的async
和PostRoute
可能看起来像这样。
PostController