J'ai deux modèles dans Ember où l'un est une collection et l'autre est livre. Le modèle de collection a une relation "hasMany" avec "book" et "book" "belongsTo" "collection". Donc ce que je veux faire est d'avoir un formulaire avec les deux modèles et de les stocker en même temps.Ember js hasmany relation sauver des données
Modèle Collection
// collection Model
export default DS.Model.extend({
name: DS.attr('string'),
city: DS.attr('string'),
books: DS.hasMany('book', { async: true })
});
Le modèle de livre
//book Model
export default DS.Model.extend({
title: DS.attr('string'),
description: DS.attr('string'),
collection: DS.belongsTo('collection', {async: true})
});
La forme
//Collection View
<div class="row">
<div class="col-sm-12">
<div class='panel panel-default'>
<div class='panel-body'>
<form>
<fieldset>
<legend>
Collection
</legend>
<div class="row">
<div class="col-sm-6">
<label for="name" class="col-sm-2">Name</label>
<div class="col-sm-10">
{{input id="name" type="text" class="form-control" value=collection.name}}
</div>
</div>
<div class="col-sm-6">
<label for="city" class="col-sm-2">city</label>
<div class="col-sm-10">
{{input id="city" type="text" class="form-control" value=collection.city}}
</div>
</div>
</div>
</fieldset>
<fieldset>
<legend>
books
</legend>
<div class="row">
<div class="col-sm-6">
<label for="title1" class="col-sm-2">title</label>
<div class="col-sm-10">
{{input id="title1" type="text" class="form-control" value=book.title1}}
</div>
</div>
<div class="col-sm-6">
<label for="description1" class="col-sm-2">description</label>
<div class="col-sm-10">
{{input id="description1" type="text" class="form-control" value=book.description1}}
</div>
</div>
</div>
<div class="row">
<div class="col-sm-6">
<label for="title2" class="col-sm-2">title</label>
<div class="col-sm-10">
{{input id="title2" type="text" class="form-control" value=book.title2}}
</div>
</div>
<div class="col-sm-6">
<label for="description2" class="col-sm-2">description</label>
<div class="col-sm-10">
{{input id="description2" type="text" class="form-control" value=book.description2}}
</div>
</div>
</div>
</fieldset>
<div class="row">
<div class="col-sm-12">
<button {{action 'addCollection'}} class="btn btn-primary">New Collection</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
Le contrôleur:
actions:{
addCollection: function(){
var name = this.get('collection.name');
var city = this.get('collection.city');
var title1 = this.get('book.title1');
var description1 = this.get('book.description1');
var title2 = this.get('book.title2');
var description2 = this.get('book.description2');
var newCollection = this.store.createRecord('collection', {
name: name,
city: city,
});
},
Comme vous pouvez le voir, j'essaie d'obtenir 2 jeux de livres pour cette collection, mais j'ai du mal à trouver la procédure correcte pour stocker des éléments sur ces modèles. Je suppose que je devrais d'abord stocker le modèle de collection et ensuite pousser les livres individuels à la collection. Est-ce correct? Comment pourrais-je y aller?
Que diriez-vous si le livre est créé dans la même instance, suggéreriez-vous de stocker le livre en premier, puis le créer comme une variable pour ensuite pousser à la collection? Comme il y a plusieurs livres sauvés à la fois, ce sera 'this.get (" livre ")' – jsg
Vous pouvez créer les deux simultanément, puis soit mettre la collection dans le livre, ou pousser le livre sur la collection. La documentation peut être trouvée ici. https://guides.emberjs.com/v2.15.0/models/relationships/#toc_creating-records @jsg – BrandonW
Si chaque livre est enregistré séparément, vous devez créer la collection avant de la main et y insérer les deux livres. Vous pouvez également définir la collection pour chaque livre lors de son enregistrement. Il peut être plus facile de passer le livre à l'action via le modèle s'il ajoute un livre à chaque fois. Je mettrai à jour ma réponse avec un scénario pour plusieurs livres en même temps. – BrandonW