Действительно ли RJS является злым и почему?

Используйте библиотека Microsoft Anti-XSS , который включает JavaScript, кодируют.

9
задан marcgg 17 November 2009 в 17:34
поделиться

7 ответов

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

RJS применяет тот же уровень абстракции к высокофункциональным библиотекам Javascript, которые ActiveRecord предоставляет для SQL. Однако охват RJS для библиотек Javascript далеко не такой полный, как охват ActiveRecord адаптеров SQL.

Rails поставляется с поддержкой RJS только для Prototype / Script.aculo.us. Однако есть плагины, доступные или разрабатываемые для поддержки других библиотек Javascript. Например, JRails переписывает помощников на основе прототипов для работы с jQuery. Подобные плагины существуют для mootools и, вероятно, Dojo.

Люди, которые считают RJS злом, как правило, те, кому не нравится его создание кода прототипа, или те, кто считает, что они могут добиться большего с помощью сырого Javascript.

RJS не идеален, так же как и ActiveRecord. Время от времени вам приходится переходить к написанию необработанного Javascript или SQL, чтобы выполнить свою работу. Опять же, как и в случае с ActiveRecord, чем удобнее вы будете пользоваться расширенными параметрами, тем больше вы сможете сделать без написания необработанного кода.

Одна замечательная особенность RJS заключается в том, что они, по сути, представляют собой представления, которые создают Javascript. Очень легко извлечь RJS на части, которые могут быть включены по мере необходимости, либо как ответы на контроллеры, либо как часть настраиваемых функций Javascript, включенных в страницу. Это делает код намного более СУХИМ, что упрощает обслуживание.

Лично я часто использую RJS. Я считаю, что это идеальный способ одновременно коснуться большого количества элементов DOM. Это дает мне двойной бонус: я могу создавать сайты с AJAX без написания Javascript. Опять же, я ненавижу писать Javascript.

30
ответ дан 4 December 2019 в 06:16
поделиться

Я не знаю, зашел бы я так далеко, чтобы сказать зло, но RJS (или любой серверный язык, генерирующий JS) не стал бы ' это мой первый выбор. Я предпочитаю писать JS вручную. С jQuery мне действительно нравится писать JS, и мне кажется, что мой JS в application.js просто чист.

Чтобы немного расширить ... Я считаю RJS ненужной абстракцией. Я хочу знать JavaScript и jQuery. Я хочу знать, как управлять DOM и как выполнять вызовы AJAX. А со своими знаниями JS / jQuery я могу легко перейти на другой фреймворк и не задумываться, сможет ли фреймворк обрабатывать мой JS за меня.

3
ответ дан 4 December 2019 в 06:16
поделиться

Учитывая, что я заменяю свою базовую библиотеку Prototype на JQuery в моих проектах Rails, я обнаружил, что RJS весьма полезен. Иногда это может быть проблемой, поскольку передача JavaScript обратно на сервер для выполнения еще не совсем распространена.

Однако я не обнаружил никаких проблем с RJS в целом. Единственная жалоба, которую я имею, заключается в том, что мне обычно приходится смешивать как RJS, так и простой старый Javascript в моих файлах .rjs, так что это немного бессмысленно. Но это действительно дает вам чистое место / способ обработки ваших эффектов Javascript и вызовов AJAX, поэтому я думаю, что это «стандартное место для размещения вашего кода», это довольно приятно.

5
ответ дан 4 December 2019 в 06:16
поделиться

Если вы не знакомы с JS (или такими фреймворками, как Prototype), но вам нужна функциональность AJAX - RJS - лучший способ для этого. Еще одно преимущество использования RJS - это скорость. Пишите код RJS легко и быстро.

Раньше я использовал RJS во всех проектах Rails. Теперь я ближе познакомился с Prototype (и jQuery), и именно по этой причине я сейчас пишу код JS. Мне это нужно, потому что контроллер с большим количеством RJS потерял производительность. И перенос кода RJS в JS был первым шагом к масштабированию контроллера.

Никто не может сказать вам абсолютно, как лучше - использовать RJS или нет. Каждый должен выбирать свой путь.

Например, я предпочитаю использовать RJS в административной части (где нет необходимости что-либо масштабировать) моего приложения и писать JS для внешней части.

1
ответ дан 4 December 2019 в 06:16
поделиться

RJS не «зло», но я думаю, что проблема с ним двоякая:

  1. Трудно (невозможно?) Делать ненавязчивый JavaScript с помощью RJS. Если вы пишете приложение с большим количеством Javascript и имеете много логики, и эта логика меняется, вам придется изменить изрядное количество файлов вместо одного. Кроме того, и это личное предпочтение, довольно уродливо видеть теги со сжатым Javascript, разбросанными по всему ним.

  2. RJS абстрагирует Javascript, что может привести к незнанию языка. Идея RJS заключалась в том, чтобы дать разработчику возможность писать все для веб-приложения (кроме HTML и CSS, которыми, вероятно, займется дизайнер), используя только один язык: Ruby, но на практике это не так. что можно, но не рекомендуется создавать ASP. NET-приложений путем перетаскивания элементов управления или использования большого количества мастеров создания тяжелого кода. Если все, что вам нужно, это простое решение, требующее добавления Ajax, тогда RJS отлично подойдет.

RJS - хороший инструмент, когда вы только начинаете работать с Rails и вам нужны «быстрые и грязные» эффекты Ajax, которые используются экономно ( например, канонический комментарий для блога, который постепенно появляется на той же странице). Как только вы начинаете требовать интенсивного использования Javascript, RJS становится еще более обременительным, потому что он защищает разработчика от того, что им действительно следует пытаться понять.

RJS - хороший инструмент, когда вы только начинаете работать с Rails и нуждаетесь в некоторых «быстрых и грязных» эффектах Ajax, которые используются экономно (например, канонический комментарий для блога, который постепенно появляется на той же странице). Как только вы начинаете требовать интенсивного использования Javascript, RJS становится еще более обременительным, потому что он защищает разработчика от того, что им действительно следует пытаться понять.

RJS - хороший инструмент, когда вы только начинаете работать с Rails и нуждаетесь в некоторых «быстрых и грязных» эффектах Ajax, которые используются экономно (например, канонический комментарий для блога, который постепенно появляется на той же странице). Как только вы начинаете требовать интенсивного использования Javascript, RJS становится еще более обременительным, потому что он защищает разработчика от того, что им действительно следует пытаться понять.

1
ответ дан 4 December 2019 в 06:16
поделиться

RJS - это просто JavaScript-эквивалент RHTML (теперь известный как html.erb). Это шаблон, который выполняет встроенный Ruby и возвращает JavaScript в браузер для обновления страницы. Это позволяет лучше контролировать то, что происходит в результате действия на стороне сервера в приложении AJAX. Фактически, результаты вызова RJS оцениваются интерпретатором JavaScript в браузере. Сравните это с приложением AJAX без RJS, где сервер возвращает HTML, который вставляется на страницу с помощью обратного вызова для асинхронного запроса.

«Зло» в том, что многим людям не нравится «eval», но я думаю, что это также может быть результатом некоторой путаницы.

Многие из ответов здесь, похоже, сосредоточены на JavaScript, Prototype и Scriptaculous Helpers, которые часто используются, но не являются обязательными, как часть шаблона RJS. Я широко использую эти помощники, поскольку они лучше работают с кодом Ruby в шаблонах, но они не являются необходимой частью RJS.

0
ответ дан 4 December 2019 в 06:16
поделиться

RJS хорош в основном потому, что его легко интегрировать в проекты Rails. Чтобы упростить задачу и уменьшить количество файлов, вы можете встроить его в свои контроллеры, и он имеет множество простых в использовании помощников из библиотек prototype / scriptaculous. Он намного больше похож на Ruby.

Это означает, что он не так четко отделен от вашего обычного кода Rails, поскольку он довольно быстро смешивается с остальной частью вашего кода. Это также требует, чтобы гораздо больше внешних библиотек было включено через прототипы и скриптовые js-файлы.

Некоторые элементы jQuery очень чисты. Синтаксис довольно сумасшедший, но это означает, что вы можете полностью вытащить свои js из своих страниц / контроллеров (ненавязчивые js), что является гораздо более чистым / разделенным на части способом работы.

Более того, jQuery выглядит как javascript. Так ты не Я получил эту странную смесь кода JavaScript и Ruby. Мне нравится Руби. Я не люблю Javascript. Но мне еще меньше нравится их сочетание. Если вы знаете JS, он покажется вам знакомым.

У Райана Бейтса есть скринкаст о преобразовании RJS в jQuery. Это может дать вам хорошее представление о различии между ними синтаксически: http://railscasts.com/episodes/136-jquery

1
ответ дан 4 December 2019 в 06:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: