#ruby-on-rails #backbone.js
#ruby-on-rails #backbone.js
Вопрос:
У меня есть несколько лет разработки Rails и несколько дней Backbone.js опыт. После этих нескольких дней, я думаю, я вошел во вкус Backbone.js . Мне было интересно узнать о виде дублирования, которое появляется при разработке Backbone.js богатые клиентские скрипты с Rails на обратной стороне. Многие модели частично переопределяются на стороне магистрали (структура модели и проверки).
Знаете ли вы инструмент, gem, который будет обрабатывать это дублирование? Или вообще имеет смысл заняться этим?
Извините за потенциальный спекулятивный вопрос. Мне интересно, пытался ли кто-нибудь решить вопрос о дублировании модели Rails / Backbone.
Комментарии:
1. Я тоже искал это на днях и жду электронную книгу ThoughtBot workshops.thoughtbot.com/backbone-js-on-rails в котором будет раздел под названием «Дублированная бизнес-логика клиента / сервера», однако он пока не запущен.
2. @SimonRentzke Спасибо за совет! Я буду следить за этой книгой.
Ответ №1:
Вам не нужно создавать дублирующую архитектуру модели для Backbone, хотя обычно это самый простой способ. (Есть расширения js для backbone, которые добавляют has_many и еще много чего, если вы идете по этому маршруту:https://github.com/dbrady/ligament.js , и https://github.com/PaulUithol/Backbone-relational)
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: не делайте следующего, это отстой.
Но вы можете передать в backbone любой JSON, который вам нравится, и назвать это «моделью», и создать отдельный контроллер для обработки сохранения всего, что вы туда вложили. Это может быть намного более запутанным, но более кратким, если вы хотите отправить большой размер JSON в backbone и сохранить его в одной модели.
Пример:
# controller
def index
@json = User.first.to_json(:include => {:address => {}, :contacts => {})
end
Отправьте этот JSON в backbone, и у вас будет объект с вложенными отношениями, хотя для Backbone это практически бессмысленно без какого-либо способа поддержания отношений, поэтому вам придется извлечь биты, с которыми вы хотите иметь дело в JavaScript, соединить их вместе и сделать ваши действия по созданию / обновлению в Rails достаточно сложными, чтобы справиться с этим…
Но дело в том, что вы можете произвольно создавать любой тип объекта JSON, который вы хотите, потому что Backbone ничего не знает о том, что Rails будет с ним делать. Backbone просто получает URL-адрес для управления своими HTTP-запросами и верит, что сервер настроен на обработку всего, что он ему выдает. Итак, не стесняйтесь отправлять и получать объекты JSON именно того типа, который вы хотите — просто имейте в виду, что вам придется выяснить, как обращаться с ними в Rails, если они пересекаются с моделями.
На самом деле, намного чище просто усложнить это и, к сожалению, дублировать большую часть архитектуры модели в Backbone.
Я думаю, что самая волшебная магистральная вещь, которую я видел до сих пор, — это библиотеки, создающие js-ассоциации, перечисленные выше. Магистраль все еще довольно неуклюжая.
Есть драгоценный камень под названием «backbone-rails» или «rails-backbone» (был странный конфликт проекта, который сделал его туманным) от «codebrew»https://github.com/codebrew/backbone-rails , это создаст для вас хороший coffeescript для работы. Вероятно, это самый простой способ, но не такой краткий, как вам хотелось бы, поскольку это генератор кода.
Если кто-нибудь может рассказать больше об этом или полностью опровергнуть меня, пожалуйста, сделайте! Я также нахожусь в центре своих базовых знаний.
PS Возможно, вы не захотите полагаться на Backbone для выполнения проверок… : ) Легко поддается взлому. Если вы добавляете их в JS, чтобы уменьшить количество ошибочных отправлений, тогда вам просто придется смириться с дублированием проверок.
Комментарии:
1. Я только что обнаружил драгоценный камень rabl, который может помочь организовать модели json по-другому. Довольно круто! github.com/nesquena/rabl