Объем данных Ember сохраняется на сервере

Ember Data быстро меняется от версии к версии, и вместе с этим меняется метод сохранения данных. Прямо сейчас с версией 1.0.0-beta.8.2a68c63a правильный метод — обновить запись, а затем выполнить record.save(), чтобы инициировать запрос PUT обратно на сервер. В моем текущем приложении я обновляю сразу несколько записей, и это может включать более 50 запросов PUT ajax обратно на сервер. Нас беспокоят проблемы с производительностью и эффективностью, и мы не нашли никакой документации по выполнению пакетных запросов. Во всяком случае, мы нашли в Интернете много других людей, которые хотят сделать то же самое и не нашли хорошего решения.

Прямо сейчас я изучаю ручную сериализацию этих объектов и сохранение их обратно на сервер, что, как мне казалось, и было основной целью Ember Data. Так что, возможно, в моих интересах вообще не использовать Ember Data и вручную кодировать CRUD-запросы, создать собственный уровень данных для обработки всего этого и просто использовать ArrayControllers и ObjectControllers для сохранения данных и привязки к шаблонам Handlebars. Похоже, что преимущества этого будут заключаться в том, что он будет работать так, как мне нужно (пакетные запросы), и код не сломается с будущими версиями Ember Data. Любые мысли или решения?


person Cory Schulz    schedule 16.06.2014    source источник
comment
Если вы говорите о нескольких типах ресурсов и нескольких обновлениях, попадающих в одну и ту же конечную точку, я бы полностью отказался от Ember Data.   -  person Kingpin2k    schedule 16.06.2014
comment
Да, это включает в себя переупорядочивание списка блоков на странице и последующее сохранение их положения, что означает обновление всех блоков. Поэтому, когда вы перемещаете один, все они перемещаются, что может составлять от 50 до 100 команд PUT каждый раз обратно на сервер. Похоже, Ember Data не совсем к этому готова.   -  person Cory Schulz    schedule 17.06.2014
comment
Определенно нет, вам лучше использовать собственную реализацию, она не должна быть слишком тяжелой.   -  person Kingpin2k    schedule 17.06.2014
comment
Вот что я понял. Такие вот дела.   -  person Cory Schulz    schedule 17.06.2014
comment
У меня был аналогичный вариант использования, и в итоге мне пришлось свернуть свой собственный. Заголовок stackoverflow.com/questions/31412839/   -  person Stefan Lyew    schedule 26.08.2015
comment
Сейчас я работаю над другим проектом и использую Ember для маршрутизатора, объектов контроллеров и компилятора шаблонов (HTMLbars), но в итоге я создал собственное хранилище данных для базового управления данными. Я делаю некоторые довольно сложные вещи с перетаскиванием сред, где я динамически создаю объекты в DOM и сохраняю позиции обратно на сервер, а затем отправляю обновления в другие объекты DOM, и Ember просто не был создан для этого типа. сложного взаимодействия данных с DOM. Я гораздо более доволен тем, что у меня есть сейчас, и подумал об использовании Sammy.js и отказе от Ember, это слишком сложно.   -  person Cory Schulz    schedule 04.09.2015


Ответы (1)


Вы можете сделать это с помощью DS.EmbeddedRecordsMixin. Если ваш объект Page имеет много блоков (например, на основе вашего комментария), то page-serializer.js будет выглядеть так:

import DS from 'ember-data';

export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
  attrs: {
    blocks: { serialize: 'records' }
  }
});

Всякий раз, когда вы сохраняете запись страницы, все связанные с ней записи блоков будут включены в этот один запрос PUT.

См. документацию здесь.

person andorov    schedule 29.10.2015
comment
Возможно, сейчас такая ситуация, но я перестал использовать Ember, потому что он стал слишком большим и сложным для работы. Я чувствую, что это в значительной степени Sproutcore снова. - person Cory Schulz; 05.11.2015
comment
Не волнуйтесь. Я подумал, что другие люди могут столкнуться с этим. - person andorov; 05.11.2015