在Ember修改模型

时间:2017-09-08 21:03:03

标签: ember.js

我正在组合一个显示商店列表的应用程序(带有添加/编辑/删除选项),点击商店名称可以转到该商店中的商品列表(再次添加/编辑/删除) )。 模特:

// 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数组中?

1 个答案:

答案 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部分。