2015-07-02 41 views
0

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

我还创建了一个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('[email protected]') 
}); 

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 } 
    ] 
}); 

回答

0

如果您要访问的模型,那么你必须要经过商店:

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

如果您要访问从另一个控制器控制器,你可以这样做:

this.get("controllers.[controllerName].[property]"); 
相关问题