2017-04-18 1 views
0

J'ai deux modèles dans ember.js avec une relation un-à-peut. Maintenant, je veux créer un nouvel objet enfant et j'ai besoin d'assigner un objet parent associé. Je n'arrive pas à comprendre comment faire ça. Mes modèles sont définis avec le code suivant:Comment ajouter un objet parent à un enfant dans une relation un-à-un dans ember js

modèle parent-objet

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    name: DS.attr('string'), 
    children: DS.hasMany('child') 
}); 
modèle

de l'enfant-objet

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    name: DS.attr('string'), 
    parent: DS.belongsTo('parent') 
}); 

Dans le model() -method de la route créer un objet enfant.

var child = this.store.createRecord('child'); 

puis d'interroger l'objet parent.

var parent = this.findRecord('parent', 2); 

Ensuite, j'ai essayé de les lier ensemble, mais tout ce que j'ai essayé a échoué. Par exemple:

parent.get('child').addObject(child) // or 
parent.get('child').pushObject(child) // or 
child.set('parent', parent) 

Ces choses aboutissent à parent ne pas avoir quoi que ce soit dans child et child ne pas avoir quoi que ce soit dans parent. J'ai également fait quelques tentatives avec la résolution async résoudre mais sans succès. Ce serait génial si quelqu'un pouvait poster un exemple comment gérer cela.

Répondre

1

Fondamentalement, cela fonctionne comme prévu. Mais vous avez quelques erreurs mineures:

  • Parfois, vous utilisez child et parfois child-object. Idem pour parent.
  • findRecord renvoie PromiseObject. Vous voulez probablement attendre la promesse de résoudre. Il n'est pas addObject.

Vous pouvez également le faire des deux côtés. Soit vous entreprenez le parent:

this.store.findRecord('parent-object', 2).then(parent => { 
    const child = this.store.createRecord('child-object'); 
    child.set('parent', parent); 
}); 

Ou vous ajoutez l'enfant aux enfants:

this.store.findRecord('parent-object', 2).then(parent => { 
    const child = this.store.createRecord('child-object'); 
    parent.get('children').pushObject(child); 
}); 

Peut-être vérifier sur this twiddle.

+0

Triple A! C'est exactement ce que je cherchais. Je pensais avoir essayé celui-ci aussi, mais évidemment pas. Peut-être vaut-il mieux noter que l'on doit retourner l'expression entière aussi bien que l'enfant (le parent dans le second exemple) pour assigner le modèle au contrôleur. – Mannimalte