2013-07-26 2 views
0

У меня есть список продуктов, которые будут загружены по маршруту /products, оттуда вы можете перейти к одному продукту под номером /products/:product_id. Это мои модели и маршрут:Загрузите дополнительные данные в модель EmberData, которая все еще находится в магазине

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, я не могу загрузить идентификатор комментариев в модель продукта. Поэтому теперь я хочу загрузить комментарии в ProductController. Я пробовал, как описано в этом SO, но он не работает. Я использую EmberDatas RESTAdapter.

ответ

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) 
     }); 
    } 
    } 
}); 
Смежные вопросы