Это определенно будет делом предпочтений, но здесь есть некоторая путаница относительно того, почему вы можете захотеть пойти с чем-то вроде Backbone над чем-то вроде RJS.
RJS отлично подходит, когда вам просто нужно вернутьсякод типа $('#post_#{@post.id}').slideUp()
или что-то в этом роде.Когда вы хотите, чтобы бэкэнд управлял внешним интерфейсом напрямую.Это действительно имеет смысл для многих приложений, конечно.Но когда вы начинаете разбираться с более сложными вещами: меняйте заголовок поста, меняйте текст поста, меняйте теги поста, меняйте заголовок поста на боковой панели «Недавние посты» и т. Д. Это может быстро усложниться.Если вы аккуратно измените разметку, вы можете сломать все ваши RJS.Кроме того, используя RJS, довольно сложно изменить всю страницу и сохранить в здравом уме пользователя (например, вы будете ломать кнопки назад и, как правило, топать все состояние в браузере).
Таким образом, для больших / более комплексных приложений вы можете создать что-то вроде Backbone как способ упорядочить ваш код и перенести логику для обработки отображения ваших данных на клиент.Некоторые преимущества:
- Вы будете меньше загружать свой сервер, поскольку клиент будет выполнять большую работу по рендерингу.
- Вы меняете некоторую разметку в шаблоне на стороне клиента, это естественнои просто изменить соответствующий
Backbone.View
, если там есть какие-то изменения, вместо того, чтобы быть потенциально несколькими действиями контроллера в Rails. - Вы можете легко управлять навигацией между несколькими страницами / состояниями и сохранять этологика на клиенте.
- Очень просто и с низким барьером организовать ваш javascript строго в соответствии с тем, что имеет смысл для вашего приложения (например,
collections.js
, models.js
, views.js
или, возможно, app.js
для небольших вещей, или, может быть, post_view.js
, posts_collection.js
... все, что вам нужно) ... опять же, вместо того, чтобы распространять JavaScript по процедурным блокам по всему Rails.
Если у вас есть приложениеэто хорошо подходит для того, чтобы быть на одной странице (например, много общих элементов, таких как навигация / боковые панели / и т.д. между страницами, например), тогда это будет довольно хорошийэто для чего-то вроде Backbone.
Ваше приложение Rails может действовать больше как API, которое может использовать любое количество внешних интерфейсов - Backbone для Интернета, приложение для iPhone и т. д.
Конечно, есть и недостатки.Вы должны написать хотя бы некоторую логику представления / контроллера вашего приложения в Java (/ Coffee) Script, и вы должны быть осторожны, когда вы не перезагружаете страницу в течение длительного времени, чтобы не вызвать утечек памяти и ошибок JavaScript, которыеможет убить ваше приложение.Когда речь идет не о компромиссах, не так ли?
Известный пример того, как кто-то не использует Backbone, когда это могло бы считаться хорошей идеей, можно найти в этом посте 37signalsо Basecamp Next (и соответствующем обсуждении HN ).
Дайте мне знать, если я смогу кое-что прояснить здесь для вас.