Соглашения RJS / Javascript в Rails - PullRequest
       36

Соглашения RJS / Javascript в Rails

1 голос
/ 22 октября 2008

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

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

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

Ответы [ 2 ]

3 голосов
/ 22 октября 2008

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

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

1 голос
/ 22 октября 2008

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

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

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