อัปเดตล่าสุดตลอดไป : ฉันไม่สามารถอัปเดตสิ่งนี้ได้ นี่จึงเลิกใช้งานและน่าจะเป็นแบบนี้ นี่คือเธรดEmberJS ที่ดีขึ้นและเป็นปัจจุบันมากขึ้น: จะโหลดหลายรุ่นในเส้นทางเดียวกันได้อย่างไร
อัปเดต:ในคำตอบเดิมของฉันฉันบอกว่าจะใช้embedded: true
ในการกำหนดโมเดล ไม่ถูกต้อง ในการแก้ไขครั้งที่ 12 Ember-Data คาดว่าจะมีการกำหนดคีย์ต่างประเทศด้วยคำต่อท้าย ( ลิงก์ ) _id
สำหรับเร็กคอร์ดเดียวหรือ_ids
สำหรับการรวบรวม สิ่งที่คล้ายกับสิ่งต่อไปนี้:
{
id: 1,
title: 'string',
body: 'string string string string...',
author_id: 1,
comment_ids: [1, 2, 3, 6],
tag_ids: [3,4]
}
ฉันได้อัปเดตซอและจะดำเนินการอีกครั้งหากมีอะไรเปลี่ยนแปลงหรือพบปัญหาเพิ่มเติมเกี่ยวกับรหัสที่ให้ไว้ในคำตอบนี้
ตอบด้วยโมเดลที่เกี่ยวข้อง:
สำหรับสถานการณ์ที่คุณกำลังอธิบายฉันจะอาศัยการเชื่อมโยงระหว่างโมเดล(การตั้งค่าembedded: true
)และโหลดPost
โมเดลในเส้นทางนั้นเท่านั้นโดยพิจารณาว่าฉันสามารถกำหนดการDS.hasMany
เชื่อมโยงสำหรับComment
โมเดลและการDS.belongsTo
เชื่อมโยงสำหรับUser
ทั้งในComment
และPost
โมเดล สิ่งนี้:
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')
});
คำจำกัดความนี้จะทำให้เกิดสิ่งต่อไปนี้:
ด้วยคำนิยามนี้ทุกครั้งที่ผมfind
โพสต์ผมจะมีการเข้าถึงคอลเลกชันของความคิดเห็นที่เกี่ยวข้องกับการโพสต์ที่เขียนและแสดงความคิดเห็นเช่นกันและผู้ใช้ซึ่งเป็นผู้เขียนของการโพสต์ตั้งแต่พวกเขาจะถูกฝังไว้ทั้งหมด เส้นทางเรียบง่าย:
App.PostsPostRoute = Em.Route.extend({
model: function(params) {
return App.Post.find(params.post_id);
}
});
ดังนั้นในPostRoute
(หรือPostsPostRoute
ถ้าคุณใช้resource
) แม่แบบของฉันจะสามารถเข้าถึงคอนโทรลเลอร์content
ซึ่งเป็นPost
โมเดลได้ดังนั้นฉันจึงสามารถอ้างถึงผู้เขียนได้ง่ายๆว่า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>
(ดูซอ )
ตอบแบบไม่เกี่ยวข้อง:
แต่ถ้าสถานการณ์ของคุณเป็นเพียงเล็กน้อยที่ซับซ้อนมากขึ้นกว่าสิ่งที่คุณอธิบายและ / หรือมีการใช้งาน (หรือแบบสอบถาม) Route#setupController
รุ่นที่แตกต่างกันสำหรับเส้นทางโดยเฉพาะอย่างยิ่งผมอยากจะแนะนำให้ทำมันใน ตัวอย่างเช่น:
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));
}
});
และตอนนี้เมื่อฉันอยู่ในเส้นทางการโพสต์แม่แบบของฉันจะสามารถเข้าถึงuser
คุณสมบัติในตัวควบคุมได้ตามที่ตั้งค่าไว้ในsetupController
hook:
<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>
(ดูซอ )