Запретить входным тегам Grails добавлять атрибуты id - PullRequest
1 голос
/ 09 февраля 2012

Я заметил, что некоторые теги Grails для генерации элементов ввода (g:textField, g:hiddenField и некоторые другие) автоматически устанавливают атрибут id сгенерированного тега HTML равным атрибуту name, если только атрибут id явно учитывая.

Есть ли способ использовать эти пользовательские теги для создания тега HTML без атрибута id? Я попытался установить для атрибута id пустую строку, но в сгенерированном коде идентификатору было присвоено имя.

Я знаю, что могу сделать это с помощью пользовательских тегов, но мне интересно, есть ли более простой способ.

1 Ответ

2 голосов
/ 10 февраля 2012

Это кажется невозможным. Исходный код класса FormTagLib.groovy показывает, что существует флаг, который решает, писать ли атрибуты id, идентичные имени, если идентификатор не был задан. К сожалению, он включен на и не настраивается извне. Смотрите следующий код:

Во-первых, у нас есть источник g:textField, который вызывает fieldImpl

def textField = { attrs ->
    attrs.type = "text"
    attrs.tagName = "textField"
    fieldImpl(out, attrs)
}

Метод fieldImpl ( полный исходный код доступен на Github ) вызывает outputAttributes. Обратите внимание на третий параметр, который true

 def fieldImpl(out, attrs) {
    resolveAttributes(attrs)
    out << "<input type=\"${attrs.remove('type')}\" "
    outputAttributes(attrs, out, true)
    out << "/>"
} 

outputAttributes выглядит следующим образом (сокращенно):

void outputAttributes(attrs, writer, boolean useNameAsIdIfIdDoesNotExist = false) {
    attrs.remove('tagName') // Just in case one is left
    attrs.each { k, v ->
      ...
    }
    if(useNameAsIdIfIdDoesNotExist) {
        outputNameAsIdIfIdDoesNotExist(attrs, writer)
    }
}

Этот метод вызывает outputNameAsIdIfIdDoesNotExist..., который сгенерирует фактический идентификатор. Поскольку outputAttribues всегда получает true, ничего нельзя сделать, чтобы перезаписать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...