在 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 部分。