如何从控制器访问Ember Data中相关模型的数据?

时间:2015-07-02 19:27:22

标签: javascript ember.js ember-data

我有一条加载所有订单商品的路线。每个订单商品都有一个产品。在控制器中,我想通过遍历所有订单商品并将order-item.quantity乘以product.price来计算订单总数。但是,order.get('product.price')不会返回价格。我认为这是因为这种关系是异步的。 total计算属性的结果为NaN。我该如何解决?谢谢!

我还创建了一个JSBin http://emberjs.jsbin.com/lisedavela/edit?html,js,output

App.IndexRoute = Ember.Route.extend({
  model: function() {
    return this.store.find('order-item');
  }
});

App.IndexController = Ember.Controller.extend({
  total: function() {
    return this.get('model').reduce(function(total, order) {
      return total + order.get('product.price');
    }, 0);
  }.property('model.@each.quantity')
});

App.OrderItem = DS.Model.extend({
  quantity: DS.attr('number'),
  product: DS.belongsTo('product', { async: true })
});

App.Product = DS.Model.extend({
  title: DS.attr('string'),
  price: DS.attr('number')
});

App.Product.reopenClass({
  FIXTURES: [
    { id: 100, title: 'Product A', price: 10 },
    { id: 200, title: 'Product B', price: 20 },
    { id: 300, title: 'Product C', price: 30 }
  ]
});

App.OrderItem.reopenClass({
  FIXTURES: [
    { id: 1, quantity: 5, product: 100 },
    { id: 2, quantity: 2, product: 200 },
    { id: 3, quantity: 1, product: 300 }
  ]
});

1 个答案:

答案 0 :(得分:0)

如果您想访问模型,那么您必须通过商店:

this.store.find("model", id).then(function(result) {
    // Do something with result, the model, here.
});

如果您想从另一个控制器访问控制器,您可以执行以下操作:

this.get("controllers.[controllerName].[property]");