Магистраль против RJS - PullRequest
       8

Магистраль против RJS

2 голосов
/ 18 марта 2012

Будучи неким случайным разработчиком рельсов и обходя все эти основы и подчеркивание в JavaScript…

Магистраль кажется интересной, но с функциональной точки зрения (я имею в виду способ, которым вы можете получить свои данные изБД и ваша страница может быть обновлена), я не вижу никакой веской причины для перехода к магистрали.Я говорю, по сравнению с подходами RJS, которые приносят рельсы.

С магистралью больше вещей происходит на стороне клиента;но не вижу каких-либо принципиальных отличий, кроме этого факта

1 Ответ

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

Это определенно будет делом предпочтений, но здесь есть некоторая путаница относительно того, почему вы можете захотеть пойти с чем-то вроде 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 ).

Дайте мне знать, если я смогу кое-что прояснить здесь для вас.

...