Backbone Relational и subviews, лучшая стратегия сохранения - PullRequest
1 голос
/ 25 февраля 2012

Я использую Backbone-реляцию, как это:

class window.Car extends Backbone.RelationalModel

class window.Person extends Backbone.RelationalModel
    relations: [{
        type: Backbone.HasOne
        key: 'car'
        relatedModel: Car
    }]

Существует также PersonView, который включает в себя подпредставление CarView.

Теперь мой вопрос:лучшая стратегия, когда пользователь нажимает «Сохранить» в PersonView?Проблема в том, что save произойдет в два этапа: сначала машина, затем человек.Но что, если проверка не проходит с человеком?Сохранение будет отменено, но автомобиль уже будет сохранен!

Может быть, Backbone-реляционный не лучший вариант здесь?Любая альтернатива?

В целом, я все больше и больше разочарован тем, что Backbone играет не очень хорошо с глубоко внедренными документами (я использую MongoDB).Да, приложение Todo приятно, но реальный мир сложнее!Любое руководство или учебное пособие будет очень цениться.

Ответы [ 2 ]

1 голос
/ 01 марта 2012

Сложно ответить, не зная деталей, но вы уверены, что вам нужны реляционные модели на стороне браузера?

Backbone предназначен для спокойных приложений.Ваш API на стороне сервера успокоен?

В вашем случае (и без реального понимания имеющихся у вас ограничений) я могу подумать о следующей реализации.

На сервере следующий URIs API:

[…]/carType/{carType}
[…]/persons/{person}
[…]/cars/{car}

В этой реализации «автомобиль» представляет собой реальный физический объект, где «автомобиль» представляет класс автомобиля.Модель магистрали для «автомобиля» содержит идентификатор для «carType» и идентификатор для «лица».Существуют также модели магистралей для «carType» и «person».Таким образом, когда вы хотите связать «person» и «carType», вы создаете новый «car» и делаете POST на сервере.Поскольку «car» - это собственный независимый объект (и имеет собственный URL), вы можете работать с ним транзакционным способом (об этом, я думаю, вы спрашиваете).

Надеюсь, это поможет иответ не очень далек от того, что вы на самом деле пытаетесь сделать.

0 голосов
/ 16 марта 2012

Лучшей стратегией сохранения было бы сохранение всего объекта атомарно (за один шаг).В противном случае у вас всегда будут проблемы такого типа, когда сбой при сохранении одного объекта на сервере означает, что вам придется уничтожить другие объекты на сервере и на клиенте., Backbone-реляционный имеет отличную поддержку для сериализации и десериализации вложенных объектов.

...