Это определенно будет вопрос предпочтений, но вот несколько бессвязных, почему Вы могли бы хотеть пойти с чем-то вроде Магистраль над чем-то вроде 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.
Если у вас есть приложение, которое хорошо зарекомендовало себя на одной странице (например, множество общих элементов, таких как навигация/боковые панели/etc между страницами, например), то это будет очень хорошо подходит для что-то вроде Backbone.
Приложение Rails может больше походить на API, который может использовать любое количество интерфейсных интерфейсов - базовый для Интернета, приложение для iPhone и т. Д.
Несомненно, есть и недостатки. Вы должны написать хотя бы часть логики представления/контроллера вашего приложения в сценарии Java (/ Coffee), и вы должны быть осторожны, когда вы не перезагружаете страницу в течение длительного времени, чтобы не вызывать утечки памяти и ошибки JavaScript, которые может убить ваше приложение. Когда речь идет не о компромиссах, так?
Высокий пример профиля кого-то не используя Backbone, когда он в противном случае можно было бы считать хорошей идеей, можно найти на этом 37signals post about Basecamp Next (и соответствующий HN discussion).
Сообщите мне, если я могу что-то разъяснить для вас.