我有一个将在/products
路线下加载的产品列表,您可以从那里导航到/products/:product_id
下的单个产品。这是我的模特和路线:
var Product = DS.Model.extend({
page_title: DS.attr('string'),
image: DS.attr('string')
});
var ProductComment = DS.Model.extend({
contents: DS.attr('string')
});
var ProductRoute = Ember.Route.extend({
model: function(params) {
return App.Product.find(params.product_id)
},
setupController: function(controller, model) {
controller.set('content', model);
}
});
在产品页面上,我想加载产品以及产品的评论。当我使用外部Api时,我无法将注释的ID加载到产品模型中。所以现在我想将注释加载到ProductsController中。我试过这个SO中所描述的但是它不起作用。我正在使用EmberDatas RESTAdapter。
答案 0 :(得分:0)
我提出了解决方案。在产品路径的modelAfter
挂钩中,检查是否使用this.get('product_comments').content.length
将注释加载到模型中。如果没有,请使用App.ProductComment.find({product_id: this.id})
加载数据并将其存储到模型中。
App.ProductRoute = Ember.Route.extend({
afterModel: function(model) {
model.ensureComments();
}
});
Product = DS.Model.extend({
page_title: DS.attr('string'),
image: DS.attr('string'),
product_comments: DS.hasMany('App.ProductComment'),
ensureComments: function() {
var productcomments = this.get('product_comments');
if (!productcomments.content.length) {
App.ProductComment.find({product_id: this.id}).then(function(result) {
productcomments.pushObjects(result)
});
}
}
});