Cập nhật lần cuối mãi mãi : Tôi không thể tiếp tục cập nhật cái này. Vì vậy, điều này không được dùng nữa và có thể sẽ là theo cách này. đây là một chủ đề hay hơn và cập nhật hơn EmberJS: Làm thế nào để tải nhiều mô hình trên cùng một tuyến đường?
Cập nhật: Trong câu trả lời ban đầu của tôi, tôi đã nói là sử dụng embedded: truetrong định nghĩa mô hình. Điều đó không chính xác. Trong bản sửa đổi 12, Ember-Data mong đợi các khóa ngoại được xác định bằng một hậu tố ( liên kết ) _idcho một bản ghi hoặc _idscho bộ sưu tập. Một cái gì đó tương tự như sau:
{
id: 1,
title: 'string',
body: 'string string string string...',
author_id: 1,
comment_ids: [1, 2, 3, 6],
tag_ids: [3,4]
}
Tôi đã cập nhật fiddle và sẽ thực hiện lại nếu có bất kỳ điều gì thay đổi hoặc nếu tôi phát hiện thêm vấn đề với mã được cung cấp trong câu trả lời này.
Trả lời với các mô hình liên quan:
Đối với kịch bản bạn đang mô tả, tôi sẽ dựa vào các liên kết giữa các mô hình (cài đặt embedded: true) và chỉ tải Postmô hình trong tuyến đó, xem xét tôi có thể xác định một DS.hasManyliên kết cho Commentmô hình và DS.belongsToliên kết cho Usercả mô hình Commentvà Postmô hình. Một cái gì đó như thế này:
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')
});
Định nghĩa này sẽ tạo ra một cái gì đó như sau:

Với định nghĩa này, bất cứ khi nào tôi findlà một Bài đăng, tôi sẽ có quyền truy cập vào một bộ sưu tập các nhận xét được liên kết với bài đăng đó và cả tác giả của nhận xét cũng như người dùng là tác giả của bài đăng, vì tất cả chúng đều được nhúng . Lộ trình vẫn đơn giản:
App.PostsPostRoute = Em.Route.extend({
model: function(params) {
return App.Post.find(params.post_id);
}
});
Vì vậy, trong PostRoute(hoặc PostsPostRoutenếu bạn đang sử dụng resource), các mẫu của tôi sẽ có quyền truy cập vào bộ điều khiển content, đó là Postmô hình, vì vậy tôi có thể tham khảo tác giả, đơn giản làauthor
<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>
(xem fiddle )
Trả lời với các mô hình không liên quan:
Tuy nhiên, nếu tình huống của bạn phức tạp hơn một chút so với những gì bạn đã mô tả và / hoặc phải sử dụng (hoặc truy vấn) các mô hình khác nhau cho một tuyến đường cụ thể, tôi khuyên bạn nên thực hiện nó Route#setupController. Ví dụ:
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));
}
});
Và bây giờ khi tôi đang ở trong tuyến Post, các mẫu của tôi sẽ có quyền truy cập vào thuộc usertính trong bộ điều khiển như nó đã được thiết lập trong setupControllerhook:
<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>
(xem fiddle )