Ember.js & Ember Data: So erstellen Sie einen Datensatz mit hasMany-Beziehung, wenn Eltern und Kind noch nicht vorhanden sind

Wie bei fast allem, was ich mit Ember-Daten mache, ist der einfache Testfall sehr einfach, aber alles, was "echt" ist, zerfällt schnell aufgrund meines Unverständnisses (und ich denke Dokumentation). Im einfachsten Fall kann ich problemlos einen neuen Datensatz erstellen und in meiner REST-API speichern. Ich werde das vorherrschende Beispiel für einen Obstkorb verwenden und mit dem Speichern eines neuen Stücks beginnenfruit.

// Here is our fruit model
module.exports = App.Fruit= DS.Model.extend({
    name: attr('string'),   
    color: attr('string')
});

// This is easy to create and save
var fruit = this.store.createRecord('fruit', {
    name: 'apple',
    color: 'red'
});

fruit.save().then(successCallback, errorCallback);

Okay, ich habe hier kein Problem. Konzeptionell macht es Sinn, der Code ist sauber und die Dinge sehen pfirsichfarben aus! Angenommen, wir haben einebasket Modell und dasbasket Modell kann viele haltenfruit. Weiterhin kann der Benutzer neue anlegenfruit und füge es einem neuen hinzubasket das wurde noch nicht in einem Schritt von der Benutzeroberfläche erstellt.

Also hier sind die neuen Modelle:

module.exports = App.Fruit= DS.Model.extend({
    name: attr('string'),   
    color: attr('string')
    basket: DS.belongsTo('basket')
});

module.exports = App.Basket = DS.Model.extend({
    fruits: DS.hasMany('fruit', {async:true})
});

Nehmen wir an, der Benutzer gibt zwei neue Früchte ein, die derzeit nicht im Store oder in der Back-End-REST-API vorhanden sind, fügt sie seinem neuen Warenkorb hinzu (der ebenfalls noch nicht vorhanden ist) und klickt dann auf "Speichern". .

Wie erstellen Sie diesen Datensatz mit Ember Data? Ich hatte gehofft, Sie könnten so etwas tun:

var newFruits = Ember.A();

newFruits.pushObject(this.store.createRecord('fruit', {
    name: 'orange',
    color: 'orange'
}));

newFruits.pushObject(this.store.createRecord('fruit', {
    name: 'banana',
    color: 'yellow'
}));

var basket = this.store.createRecord('basket', {
    fruits: newFruits
});

basket.save().then(successCallback, errorCallback);

Leider scheint dies nicht zu funktionieren. Wenn ich mir die POST-Anforderungsdaten im Chrome-Inspektor ansehe, wird dasfruits Eigentum des Korbes ist immer leer. Grundsätzlich sieht die Anfrage so aus:

{
    basket: {
       fruits: []
    }
}

Verwende ich das richtige Muster, um den Datensatz "Warenkorb" zu erstellen? Ich hoffe, dass ich nicht jedes Stück Obst speichern muss, bevor ich den Korb speichere, da es verschwenderisch erscheint, 3 POST-Anfragen zu senden, wenn 1 ausreichen würde. Was passiert außerdem, wenn der Benutzer 10 Fruchtstücke herstellen möchte? Das wären 11 POST-Anfragen.

Gibt es eine Standardpraxis, um die oben genannten Ziele zu erreichen? Wie erstellt man einen neuen Datensatz mit einer hasMany-Beziehung (Korb), wobei die Datensätze in der hasMany-Beziehung ebenfalls neu sind (Frucht)?

Danke!

Hier sind die Versionen, die ich benutze:

------------------------------- 
Ember      : 1.3.2+pre.25108e91 
Ember Data : 1.0.0-beta.7+canary.238bb5ce 
Handlebars : 1.3.0 
jQuery     : 2.0.3 
------------------------------- 

Antworten auf die Frage(2)

Ihre Antwort auf die Frage