Nasıl EmberJS / Ember Veri tek bir rota ile birden fazla modeli kullanmak için?
Belgeleri okuma, (veya) o yüzden böyle bir yol için bir model atamak zorunda gibi görünüyor
App.PostRoute = Ember.Route.extend({
model: function() {
return App.Post.find();
}
});
Eğer belirli bir rota içinde çeşitli nesneleri kullanmak için ihtiyacım olursa? yani Mesajlar, Yorumlar ve Kullanıcılar? Nasıl bir yol bu yükü söyle?
CEVAP
Güncelleme:Benim orijinal cevap model tanımı embedded: true
kullanma dedim. Bu doğru değil. Revizyon 12, Ember-Veri yabancı anahtarlar bir sonek (link) tek bir kayıt için _id
_ids
ile tanımlanan koleksiyon için bekliyor. Aşağıdakine benzer bir şey:
{
id: 1,
title: 'string',
body: 'string string string string...',
author_id: 1,
comment_ids: [1, 2, 3, 6],
tag_ids: [3,4]
}
Keman güncelledik ve eğer bir değişiklik olursa ya da eğer kodu bu cevap sağlanan daha fazla sorunlarla bulursam aynı şeyi yapmayacağım.
İlgili modelleri ile cevap
Anlattığın senaryo için modelleri arasında associations güvenmek istiyorum(ve sadece yük embedded: true
ayar)Post
model rota, dikkate edebilirim tanımlamak bir DS.hasMany
Derneği Comment
model DS.belongsTo
Derneği User
hem Comment
Post
modelleri. Şöyle 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 üretir:
Bu tanım, ne zaman olursa find
bir Yazı, ben erişimi koleksiyonu yorumları ile ilgili bu yazı ve yorum yazarı olarak, ve kullanıcı hangi yazarın sonrası,gömülü oldukları. Rota basit kalır:
App.PostsPostRoute = Em.Route.extend({
model: function(params) {
return App.Post.find(params.post_id);
}
});
Yani içinde PostRoute
(ya da PostsPostRoute
kullanıyorsanız resource
), benim şablonları erişimi denetleyicisi content
olan Post
model, yani bakın yazar, Basit olarak 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>
(fiddle)
Non-ilgili modeller: ile cevap
Eğer senaryo senin tarif ettiğin şey biraz daha karmaşık ise ve/veyavar(veya sorgu) belirli bir güzergah için farklı modeller kullanmak, Route#setupController
bunu yapmak için tavsiye ederim. Örneğin:
App.PostsPostRoute = Em.Route.extend({
model: function(params) {
return App.Post.find(params.post_id);
},
// in this sample, "model" is an instance of "Post"
// coming from the model hook above
setupController: function(controller, model) {
controller.set('content', model);
// the "user_id" parameter can come from a global variable for example
// or you can implement in another way. This is generally where you
// setup your controller properties and models, or even other models
// that can be used in your route's template
controller.set('user', App.User.find(window.user_id));
}
});
Ve şimdi Post rota olduğum zaman, benim şablonları setupController
kanca, set up, kontrol sistemi user
özellik erişimi olacak:
<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>
(fiddle)
Bir film şeridi içinde, nasıl birden f...
Nasıl WPF veri tetiklemek için birden ...
Nasıl alt için birden fazla koşul veri...
bir öğe veri-öznitelik değeri için bir...
Nasıl birden fazla çalıştırmak için .B...