Ember.js & Ember Data: Как создать запись с отношением hasMany, когда родитель и потомок еще не существуют

Как и в большинстве случаев, которые я делаю с ember-data, простой тестовый пример очень прост, но все «реальное» быстро распадается из-за моего непонимания (и я думаю, что документация). В простейшем случае у меня нет проблем с созданием новой записи и сохранением ее в моем REST API. Я буду использовать распространенный пример корзины с фруктами и начну с сохранения нового фрагментаfruit.

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

Хорошо, у меня нет проблем здесь. Концептуально имеет смысл, код чист, и все выглядит персиково! Теперь предположим, что у нас естьbasket модель иbasket модель может содержать многоfruit, Кроме того, пользователь может создавать новыеfruit и добавить его в новыйbasket это еще не было создано в одном шаге от пользовательского интерфейса.

Итак, вот новые модели:

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

Учитывая вышесказанное, допустим, что пользователь вводит два новых фрукта, которых в данный момент не существует в магазине или в REST API бэкэнда, добавляет их в свою новую корзину (которая также еще не существует) и затем нажимает «сохранить». ,

Как вы создаете эту запись, используя Ember Data? Я надеялся, что вы могли бы сделать что-то вроде этого:

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

К сожалению, это не похоже на работу. Когда я смотрю на данные запроса POST в Chrome инспекторfruits свойство корзины всегда пусто. По сути, запрос в конечном итоге выглядит так:

{
    basket: {
       fruits: []
    }
}

Использую ли я правильный шаблон для создания записи корзины? Я надеюсь, что мне не нужно в конечном итоге сохранять каждый фрукт перед сохранением корзины, так как отправлять 3 POST-запроса, когда достаточно 1, кажется расточительным. Кроме того, что происходит, когда пользователь хочет создать 10 кусочков фруктов? Это было бы 11 POST запросов.

Существует ли стандартная практика для выполнения вышесказанного? По сути, как вы создаете новую запись со связью hasMany (корзина), где записи в связи hasMany также являются новыми (плод).

Спасибо!

Вот версии, которые я использую:

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

Ответы на вопрос(2)

Ваш ответ на вопрос