2017-09-08 2 views
0

Je suis en train de mettre en place une application qui affiche une liste de magasins (avec ajouter/modifier/supprimer des options), et en cliquant sur un nom de magasin vous emmène à la liste des articles dans ce magasin/éditer/supprimer). Le modèle:Modifier le modèle dans Ember

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

Fondamentalement, le modèle devrait être aussi:

{ 
    "shopName": "someName", 
    "shopDetails": "someDetails", 
    "shopStock": [ 
     { 
      "name": "foo", 
      "description": "bar", 
      "price": "555" 
     } 
    ] 
} 

Pour chaque magasin la route est dynamique:

// app.router.js 
Router.map(function() { 
    this.route('shop', function() { 
     this.route('stock', { path: '/:shop_id/stock' }); 
     this.route('edit', { path: '/:shop_id/edit' }); 
    }); 
}); 

Et dans le contrôleur je:

actions: { 
    saveItem() { 
     const newItem = { 
      name: this.get('itemName'), 
      description: this.get('itemDescription'), 
      price: this.get('itemPrice') 
     }; 
    } 
} 

La question est, comment puis-je pousser l'objet newItem dans la matrice shopStock du modèle?

+0

Etes-vous sûr de ne pas vouloir utiliser un autre modèle pour 'shopStock'? – Lux

+0

La solution facile semble être que vous créez un autre modèle appelé 'shopStock' et que vous modifiez le modèle' shop' pour avoir 'DS.hasMany ('shopStock', {() => []})' – Sumit

Répondre

1

Puisque vous voulez créer/modifier/enregistrer/supprimer les enregistrements enfants associés, vous devez créer un nouveau modèle pour l'enfant (shopStock) qui appartient au parent (magasin).

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

Votre modèle boutique devrait aussi avoir un autre champ ajouté, shopStocks: DS.hasMany('shop-stock').

Lorsque vous souhaitez ajouter des enregistrements enfants au parent, vous utiliserez la méthode .pushObject(). Voir la section Model Relationships des guides pour plus de détails.