我正在组合一个显示商店列表的应用程序(带有添加/编辑/删除选项),点击商店名称可以转到该商店中的商品列表(再次添加/编辑/删除) )。 模特:
// app/models/shop.js
import DS from 'ember-data';
export default DS.Model.extend({
shopName: DS.attr('string'),
shopDetails: DS.attr('string'),
shopStock: DS.attr('array', {
defaultValue() {
return [];
}
})
});
基本上模型应该是:
{
"shopName": "someName",
"shopDetails": "someDetails",
"shopStock": [
{
"name": "foo",
"description": "bar",
"price": "555"
}
]
}
对于每个商店,路线都是动态的:
// app.router.js
Router.map(function() {
this.route('shop', function() {
this.route('stock', { path: '/:shop_id/stock' });
this.route('edit', { path: '/:shop_id/edit' });
});
});
在控制器中我有:
actions: {
saveItem() {
const newItem = {
name: this.get('itemName'),
description: this.get('itemDescription'),
price: this.get('itemPrice')
};
}
}
问题是,如何将newItem
对象推送到模型的shopStock
数组中?
答案 0 :(得分:1)
由于您要创建/编辑/保存/删除相关的子记录,您应该为属于父(商店)的子(shopStock)创建一个新模型。
// app/models/shop-stock.js
import DS from 'ember-data';
export default DS.Model.extend({
name: DS.attr('string'),
description: DS.attr('string'),
price: DS.attr('string'),
shop: DS.belongsTo('shop')
})
});
您的商店模型还应添加其他字段shopStocks: DS.hasMany('shop-stock')
。
如果要将子记录添加到父级,则将使用.pushObject()
方法。有关详细信息,请参阅指南的Model Relationships部分。