Рельсы и атрибуты данных html: используйте тире (-) или подчеркивание (_)?
В последнее время у меня возникают проблемы с атрибутами пользовательских данных HTML в приложении rails. Я использую следующий шаблон, чтобы добавить некоторые атрибуты данных в теги html и использовать их позже в моем javascript (jQuery) коде:
= %a.name{ href: "url.com", data: {first_name: "ben", last_name: "amsalem} }
В коде javascript я получаю доступ к этим атрибутам:
alert($(".name").data("first_name") + " " + $(".name").data("last_name"));
В моей среде разработки все идет хорошо, и я получаю ожидаемый результат (то же самое верно для моей производственной среды в прошлом), но в моей текущей производственной версии я получаю значения "undefined".
Я проверил источник HTML страницы, и я увидел, что у меня теперь есть что-то вроде:
<a class="name" href="url.com" data-first-name="ben" data-last-name="amsalem" />
Вместо:
<a class="name" href="url.com" data-first_name="ben" data-last_name="amsalem" />
Почему это происходит? Что вызывает изменение?
Ответы
Ответ 1
После тестов, которые я сделал: похоже, в разработке у меня были драгоценные камни в версии 3.2.9, а в производстве было 3.2.12 - было исправлено неправильное поведение (преобразование в <a date-last_name/>
) между этими версиями и после обновления моего версия разработки Я вижу изменения.
Ответ 2
Это нормально нормально, data: { first_name: "ben" }
должен создавать data-first-name="ben"
.
Лучший способ доступа к этому атрибуту - .data("firstName")
, но .data("first-name")
также будет работать.
Ответ 3
Я полагаю, что вы используете HAML. Hypernation устанавливается как значение по умолчанию с 4.0. Установите для параметра hyphenate_data_attrs
значение false, чтобы отключить его.
Документация: http://haml.info/docs/yardoc/Haml/Options.html#hyphenate_data_attrs-instance_method
Оригинальная дискуссия по github: https://github.com/haml/haml/pull/488