Ember.js e dados da Ember: como criar registro com o relacionamento hasMany quando o pai e o filho ainda não existem

Como parece ser o caso de quase tudo o que faço com dados de brasa, o caso de teste simples é muito simples, mas qualquer coisa "real" desmorona rapidamente devido à minha falta de entendimento (e acho que a documentação). No caso mais simples, não tenho problemas para criar um novo registro e salvá-lo na minha API REST. Vou usar o exemplo predominante da cesta de frutas e começar apenas salvando um novo pedaço defruit.

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

Ok, não tenho nenhum problema aqui. Conceitualmente faz sentido, o código é limpo e as coisas parecem peachy! Agora, suponha que tenhamos umbasket modelo e quebasket modelo pode conter muitasfruit. Além disso, o usuário pode criar novasfruit e adicione-o a um novobasket que ainda não foi criado em uma etapa da interface do usuário.

Então, aqui estão os novos modelos:

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

Dado o exposto, digamos que o usuário insira duas novas frutas que não existem atualmente na loja ou na API REST de back-end, adicione-as à nova cesta (que ainda não existe ainda) e pressione 'salvar' .

Como você cria esse registro usando os dados da Ember? Eu esperava que você pudesse fazer algo assim:

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);

Infelizmente, isso não parece funcionar. Quando olho os dados da solicitação POST no inspetor Chrome, ofruits A propriedade da cesta está sempre vazia. Basicamente, a solicitação acaba procurando o seguinte:

{
    basket: {
       fruits: []
    }
}

Estou usando o padrão correto para criar o registro 'basket'? Espero não ter que acabar salvando cada pedaço de fruta antes de salvar a cesta, pois parece um desperdício enviar 3 solicitações POST quando 1 for suficiente. Além disso, o que acontece quando o usuário deseja criar 10 pedaços de frutas? Seriam 11 solicitações do POST.

Existe uma prática padrão para realizar o que foi dito acima? Essencialmente, como você cria um novo registro com um relacionamento hasMany (cesta) em que os registros no relacionamento hasMany também são novos (o fruto).

Obrigado!

Aqui estão as versões que estou usando:

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

questionAnswers(2)

yourAnswerToTheQuestion