2017-09-08 14 views
0

私はストアのリストを表示するアプリケーション(追加/編集/削除オプション付き)を作成し、ストア名をクリックすると、そのストアのアイテムのリストに移動します/編集/削除)。 モデル:Emberでモデルを変更する

{ 
    "shopName": "someName", 
    "shopDetails": "someDetails", 
    "shopStock": [ 
     { 
      "name": "foo", 
      "description": "bar", 
      "price": "555" 
     } 
    ] 
} 
それぞれについて、

はルートが動的であるお店::として

// 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 []; 
     } 
    }) 
}); 

基本的にはモデルがあるべき

// 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オブジェクトをモデルの配列にプッシュするにはどうすればいいですか?

+0

'shopStock'に別のモデルを使用したくないですか? – Lux

+0

簡単な解決策は、 'shopStock'という別のモデルを作成し、DS.hasMany( 'shopStock'、{()=> []})' ' – Sumit

答えて

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セクションを参照してください。

関連する問題