2015-02-05 3 views
0

У меня есть шаблон, который можно было бы отображать несколько раз в одном представлении.Лучшая практика для генерации html-идентификаторов с grails

Шаблон содержит форму, и у меня есть некоторые прослушиватели событий jquery, прикрепленные к элементам формы, используя идентификатор html.

На данный момент я использую 'g: set' для создания переменной elementId в верхней части шаблона с использованием текущего времени в миллисекундах и добавления его к каждому элементу формы. Таким образом, каждый элемент формы будет иметь уникальный идентификатор внутри страницы, независимо от того, сколько раз будет отображаться один и тот же шаблон.

Мой подход работает, но мне кажется, что должен быть лучший способ достичь того, что я хочу сделать?

Вот пример моего подхода:

<g:set var="elementId" value="${'elementId-' + new Date().getTime()}" /> 

<form> 
<g:textField id="${elementId}name" name="name"/> 
<g:textField id="${elementId}address" name="address"/> 
</form> 

<script> 
$("#${elementId}name").on("click", myFunction()) 
$("#${elementId}address").on("click", myFunction()) 
</script> 
+0

Помимо моего ответа, проверьте также привязку javascript, вам не хватает закрывающих двойных кавычек для события «click», которое вы связываете. – lucke84

+0

Извините. У меня нет доступа к моему проекту на данный момент. Синтаксис хорош там, поэтому его просто ошибка в моем вопросе. Мой подход работает, я просто чувствую, что, вероятно, должен быть лучший способ генерации идентификаторов. Может быть, нет? – Travis

+0

Неправда, мой плохой. Каковы опасения по поводу этого подхода? Это выглядит прилично для меня. – lucke84

ответ

0

Хотя это может чувствовать себя немного «странным» или «странным», чтобы сделать это, ваш подход будет сделать то, что вы после этого. Добавление в случайное число или UUID, которые вы генерируете на уровне GSP, также помогло бы избежать столкновений (хотя это может быть излишним).

Компания Grails не предлагает никакой помощи в этом отношении. Поскольку это связано с тем, как элементы адресуются в браузерах, DOM и Grails обычно обращаются к серверным проблемам.

Альтернативой является реорганизация вашего кода, чтобы не полагаться на идентификаторы элементов, а скорее на нечто более общее и основанное на классификации. Использование имен классов было бы хорошим подходом. В зависимости от ваших требований это может работать или не работать.

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