在 Ember 中修改模型
Modifying model in Ember
我正在组装一个显示商店列表的应用程序(带有 add/edit/delete 选项),然后单击商店名称会将您带到该商店中的商品列表(同样带有 add/edit/delete).
型号:
// 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
数组?
既然你想create/edit/save/delete相关的子记录,你应该为属于父(商店)的子(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 部分。
我正在组装一个显示商店列表的应用程序(带有 add/edit/delete 选项),然后单击商店名称会将您带到该商店中的商品列表(同样带有 add/edit/delete). 型号:
// 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
数组?
既然你想create/edit/save/delete相关的子记录,你应该为属于父(商店)的子(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 部分。