চিরদিনের জন্য সর্বশেষ আপডেট : আমি এটি আপডেট করে রাখতে পারি না। সুতরাং এটি অবচয় করা হয়েছে এবং সম্ভবত এটি এইভাবে হবে। এখানে আরও উন্নততর এবং আরও আপ-টু-ডেট থ্রেড এমবারজেএস: একই রুটে একাধিক মডেল কীভাবে লোড করবেন?
আপডেট: আমার মূল উত্তরে আমি বলেছিলাম embedded: true
মডেল সংজ্ঞাতে। এটা ভুল। রিভিশন 12-এ, অ্যাম্বার-ডেটা বিদেশী কীগুলি একক রেকর্ডের জন্য বা সংগ্রহের জন্য প্রত্যয় ( লিঙ্ক ) দিয়ে সংজ্ঞায়িত হওয়ার প্রত্যাশা করে । নিম্নলিখিত কিছু অনুরূপ:_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
হুক সেট আপ হওয়ার সাথে সাথে অ্যাক্সেস পাবে :
<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>
( বেড়া দেখুন )