2009-08-17 5 views
1

В Ruby on Rails я работаю с встроенным RJS и пытаюсь выяснить, какой вариант выбора был выбран путем доступа к свойству selectedIndex. По какой-то причине невозможно заставить это работать.Доступ к значениям элементов в RJS

Так, например, присвоение/изменение свойства SelectedIndex отлично работает:

page['model_author_id'].selectedIndex = 5 

Но читать это и делает сравнение внутри RJS не работает:

if page['model_author_id'].selectedIndex == 0 then xxx end 

Я сделал отладки в Firebug и кажется, что RJS генерирует следующий (неправильный) код:

$("model_author_id").selectedIndex().= = 0; 

Итак, вопрос в том, как я могу получить значения элементов страницы с помощью RJS?

ответ

2

RJS - это всего лишь генератор javascript, и javascript не запускается до тех пор, пока он не будет на стороне клиента. Поэтому вы не можете определить значение параметра выбора, пока оно еще находится в Ruby.

Если вы хотите сделать оператор «if» для выбранного значения, вам нужно будет сделать это в Javascript.

page << "if ($('model_author_id').selectedIndex() == 0) {" 
    page["model_author_id"].selectedIndex = 5 # or whatever you want here 
page << "}" 
+0

Большое спасибо за ответ ryanb, по какой-то причине я не смог найти ответ на это в книгах Rails и на форумах. На самом деле, я считаю, что трудность для новичков RJS, подобных мне, заключается в том, что разница очень тонкая - да, RJS - генератор javascript, но почему он не может генерировать условные выражения и т. Д. Для вас, конвертируя Ruby в JS? – Vlad

+0

Это ограничение языка Ruby. Оператор «=» - это метод, и поведение можно переопределить, но «если» поведение не может быть. Если вам нравится javascript, я рекомендую не использовать RJS. Вместо этого просто соедините javascript и erb напрямую (с файлом вида, например index.js.erb). – ryanb

Смежные вопросы