RJS:Проверить наличие существующего элемента страницы?
-
08-07-2019 - |
Вопрос
У меня есть текстовое поле с идентификатором "foo", которое иногда существует, а иногда нет.Если он существует, я бы хотел ввести определенное значение.
Как вы делаете это, используя RJS (в Рельсы 2.2)?
Я попробовал это, и это не сработало:
if page[:foo]
page[:foo].value = "bar"
end
Я получаю
Ошибка типа:Нулевое значение, если текстовое поле не существует
.
Решение
Я много раз сталкивался с этим, когда у меня есть условный элемент, с которым нужно действовать, если он существует.Использование page.select позволяет избежать ошибки с нулевым значением.
page.select('#dom_object_id').each do |element|
element.value = "bar"
end
Я поместил это в свой файл *.js.rjs.Когда select отправляет пустой массив каждому, он ничего не возвращает вместо TypeError, который вы получили бы при прямом выборе по id, когда на странице нет объекта DOM с правильным идентификатором.
Другие советы
Я не думаю, что вы можете использовать RJS.В качестве обходного пути вы можете просто вызвать метод javascript из RJS, который проверяет, существует ли элемент.
page << "update_foo('#{my_value}');"
Javascript ..
function update_foo(val)
{
if( $('foo') != undefined )
{
$('foo').value = 'bar';
}
}
Редактировать
Исправлена рубиновая часть..