我有一个我作为组件呈现的产品列表。
这是我的模板
<p>{{product.name}}</p>
<p>{{product.description}}</p>
<p>{{product.price}}</p>
<p>{{product.productCategory.id}}</p>
{{#product-line-item product.lineItems}}
{{/product-line-item}}
我正在尝试将过滤后的数组(product.lineItems)传递给组件,以便我可以指示购物车中每个产品的数量。我在模型中尝试做的事情似乎不正确。
以下是我尝试在产品模型上为属于该产品的lineItem创建数组:
export default Ember.Route.extend({
model() {
return Ember.RSVP.hash({
products: this.store.findAll('product'),
productCategories: this.store.findAll('productCategory'),
lineItems: this.store.queryRecord('lineItem', { user_id: this.get('session.secure.user_id') })
}).then(function (model) {
model.products.forEach(function(product){
product.lineItems = [];
model.lineItems.forEach(function(lineItem) {
if (lineItem.productId === product.id) {
product.lineItems.pushObject(lineItem);
}
})
});
return model
});
}
});
首先,每个产品最终都有一个空的lineItems数组。
其次这感觉不对。我吠叫错了树吗?
答案 0 :(得分:1)
理想情况下,lineItems
属于product
。但是,可以在不改变模型之间关系的情况下完成所需的操作。但是我需要假设一些事情:
lineItem
的属性productId
与某些product.id
匹配,因此过滤器可以正常使用试试这个:
export default Ember.Route.extend({
model() {
return Ember.RSVP.hash({
products: this.store.findAll('product'),
productCategories: this.store.findAll('productCategory'),
lineItems: this.store.queryRecord('lineItem', { user_id: this.get('session.secure.user_id') })
}).then(model => {
model.products.forEach(product => {
let lineItems = [];
model.lineItems.forEach(lineItem => {
if (lineItem.get('productId') === product.get('id')) {
lineItems.pushObject(lineItem);
}
})
product.set('lineItems', lineItems);
});
return model;
});
}
});
答案 1 :(得分:0)
这是我更新的代码。我让它变得过于复杂。我只是在每个名为numberOfLineItems的产品上声明一个新属性,并指定数量(如果适用),否则为0.
export default Ember.Route.extend({
model() {
return Ember.RSVP.hash({
products: this.store.findAll('product'),
productCategories: this.store.findAll('productCategory'),
lineItems: this.store.queryRecord('lineItem', { user_id: this.get('session.secure.user_id') })
})
},
afterModel: function(model) {
model.products.forEach(function(product){
// product.lineItems = [];
product.numberOfLineItems = 0
model.lineItems.forEach(function(lineItem) {
if (lineItem.get('product.id') === product.id) {
product.numberOfLineItems = lineItem.get('quantity');
}
})
});
return model
}
});