Как изменить значение атрибута тега html из шаблона RJS?

Можно ли изменить значение атрибута тега html из шаблона RSJ? Я знаю, что есть метод page.replace_html, но в моем случае он не очень полезен, так как у меня длинные значения различных атрибутов (таких как alt, title изображения). Я хочу изменить атрибут src тега img в RJS. Это вообще возможно?

Спасибо.


person Valentin V    schedule 05.03.2009    source источник


Ответы (3)


EDIT: Моя первая попытка не сработала, но эта сработала.

update_page do |page|
  page['image_id']['src'] = new_image_url
end
person Can Berk Güder    schedule 05.03.2009

Небольшая модификация ответа Can. Как было предложено,

update_page do |page|
    page['image_id']['src'] = new_image_url
end

переводится на JS:

$('image_id').src = new_image_url

Это будет работать для некоторых атрибутов, у которых есть прямой доступ к переменной JS DOM, но у многих нет. К счастью, RJS неплохо переписывает вызовы JS-методов:

update_page do |page|
    page['image_id'].set_attribute('attrib', new_attrib_val)
end

переводится на JS:

$('image_id').setAttribute('attrib', new_attrib_val)

и вы должны быть готовы идти.


Небольшое обновление: вместо этого вы можете использовать write_attribute, если хотите совместимости с IE.


Небольшое обновление: в приведенном выше примере [:src] и :attrib, вероятно, было бы лучше, если бы они были статическими.

person Chinasaur    schedule 15.03.2009

В зависимости от настройки Rails приведенный выше код может работать только в том случае, если вы исключите начальную и конечную строки page_update -- я запускаю Rails на mongrel в Windows 7 и помещаю код page[element][attribute] отдельно, снаружи блока update_page работает нормально, но включение его внутрь блока нарушает код.

person jatkins    schedule 17.07.2010