Ember模型:一对多的固定装置,服务器通话

时间:2013-09-21 23:30:22

标签: model ember.js

在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条评论。

您能否提供一个简单的版本,了解每个电话的外观?

1 个答案:

答案 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}) }); ),您将希望使用分页一次只加载一些注释。在这种情况下,您的asyncPostRoute可能看起来像这样。

PostController