将其他数据加载到仍在商店中的EmberData模型中

时间:2013-07-26 16:34:47

标签: ember.js ember-data

我有一个将在/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。

1 个答案:

答案 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)
      });
    }
  }
});