Вопрос

Я начинаю изучать весь мир RJS и Prototype / jQuery в Rails и немного растерялся. Кажется, нет четкой линии, где использовать тот или другой.

Скажите, что я хотел одного из "Активных, Горячих, Недельных" вкладки, подобные тем, что здесь на SO. При нажатии на один из них я хочу удалить класс CSS (например, «active-tab») из того, на котором я был, и добавить его к тому, на котором я щелкнул. Затем я также хочу перезагрузить div, содержащий элементы, и вставить в него новые элементы.

Кажется, что изменение класса было бы проще всего сделать в чистом javascript, скажем, поместить код в application.js, а затем обновить div с содержимым, очевидно, будет проще всего в RJS. Но что нужно сделать?

Это было полезно?

Решение

Если вы хотите дать пользователям возможность напрямую ссылаться на сгенерированную страницу, то обязательно перейдите на статическую страницу. Использование AJAX нарушает работу кнопки «Назад», если вы не используете что-то вроде Действительно простой истории (, который не является кросс-браузерным на 100% ), поэтому прохождение JS-маршрута с навигацией по вашей странице почти наверняка вызовет некоторые проблемы у ваших пользователей.

Тем не менее, то, что вы уже обсуждали, было бы хорошо, я думаю - просто измените класс в своем файле RJS, тогда вам может даже пригодиться обновить содержимое div с помощью page.replace и частично:

page.replace(dom_id, :partial => @page_content);

Другие советы

Если вам удобно писать JavaScript, во всех случаях используйте JavaScript. В этом нет ничего плохого; вам не нужно использовать RJS только потому, что он существует. На самом деле вы, вероятно, обнаружите, что его абстракции мешают.

Однако, если вы предпочитаете писать код на Ruby, который генерирует JavaScript, так же, как вы пишете код на Ruby, который генерирует SQL в миграциях ActiveRecord, тогда RJS является подходящим инструментом для этой работы. Или вы можете использовать оба: RJS для довольно простых вещей, а затем перейти к JavaScript для более сложного поведения. Используйте то, что вам подходит.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top