Sonsuza dek son güncelleme : Bunu güncellemeye devam edemiyorum. Yani bu kullanımdan kaldırıldı ve muhtemelen bu şekilde olacak. işte daha iyi ve daha güncel bir iş parçacığı EmberJS: Aynı rotaya birden fazla model nasıl yüklenir?
Güncelleme: Orijinal cevabımda embedded: truemodel tanımında kullanmamı söyledim . Bu yanlış. Revizyon 12'de Ember-Data, yabancı anahtarların tek kayıt veya toplama için bir son ek ( bağlantı ) ile tanımlanmasını bekler . Aşağıdakine benzer bir şey:_id_ids
{
id: 1,
title: 'string',
body: 'string string string string...',
author_id: 1,
comment_ids: [1, 2, 3, 6],
tag_ids: [3,4]
}
Keman'ı güncelledim ve herhangi bir değişiklik olursa veya bu yanıtta verilen kodla ilgili daha fazla sorun bulursam bunu tekrar yapacağım.
İlgili modellerle cevaplayın:
Sizin tarif edilmektedir senaryosu için, ben güvenmek istiyorum ilişkilendirmeleri modelleri arasındaki (ayar embedded: true) ve sadece yük PostBen tanımlayabilirsiniz göz önüne alırsak bu rotada modeli DS.hasManyiçin dernek Commentmodeli ve DS.belongsToiçin dernek Userhem de Commentve Postmodeller. Bunun gibi bir şey:
App.User = DS.Model.extend({
firstName: DS.attr('string'),
lastName: DS.attr('string'),
email: DS.attr('string'),
posts: DS.hasMany('App.Post'),
comments: DS.hasMany('App.Comment')
});
App.Post = DS.Model.extend({
title: DS.attr('string'),
body: DS.attr('string'),
author: DS.belongsTo('App.User'),
comments: DS.hasMany('App.Comment')
});
App.Comment = DS.Model.extend({
body: DS.attr('string'),
post: DS.belongsTo('App.Post'),
author: DS.belongsTo('App.User')
});
Bu tanım aşağıdaki gibi bir şey üretecektir:

Bu tanımla, ne zaman findbir Gönderi yapsam, bu gönderi ile ilişkili bir yorum koleksiyonuna ve yorumun yazarına ve hepsi gömülü olduğu için gönderinin yazarı olan kullanıcıya erişime sahip olacağım . Rota basit kalır:
App.PostsPostRoute = Em.Route.extend({
model: function(params) {
return App.Post.find(params.post_id);
}
});
Yani içinde PostRoute(veya PostsPostRoutekullanıyorsanız resource), şablonlarım model contentolan denetleyiciye erişebilecek Post, böylece yazara basitçeauthor
<script type="text/x-handlebars" data-template-name="posts/post">
<h3>{{title}}</h3>
<div>by {{author.fullName}}</div><hr />
<div>
{{body}}
</div>
{{partial comments}}
</script>
<script type="text/x-handlebars" data-template-name="_comments">
<h5>Comments</h5>
{{#each content.comments}}
<hr />
<span>
{{this.body}}<br />
<small>by {{this.author.fullName}}</small>
</span>
{{/each}}
</script>
( keman bakın )
İlgili olmayan modellerle cevaplayın:
Senin senaryo açıklanan olandan biraz daha karmaşıktır ve / veya Ancak, sahip belirli bir rota için kullanım (veya sorgu) farklı modellere, ben bunu yapmak için öneriyoruz Route#setupController. Örneğin:
App.PostsPostRoute = Em.Route.extend({
model: function(params) {
return App.Post.find(params.post_id);
},
setupController: function(controller, model) {
controller.set('content', model);
controller.set('user', App.User.find(window.user_id));
}
});
Ve şimdi Gönderi yolundayken, şablonlarım kancada userayarlandığı için denetleyicideki özelliğe erişebilecek setupController:
<script type="text/x-handlebars" data-template-name="posts/post">
<h3>{{title}}</h3>
<div>by {{controller.user.fullName}}</div><hr />
<div>
{{body}}
</div>
{{partial comments}}
</script>
<script type="text/x-handlebars" data-template-name="_comments">
<h5>Comments</h5>
{{#each content.comments}}
<hr />
<span>
{{this.body}}<br />
<small>by {{this.author.fullName}}</small>
</span>
{{/each}}
</script>
( keman bakın )