防止 Grails 输入标签添加 id 属性



我注意到一些用于生成输入元素的Grails标签(g:textFieldg:hiddenField和其他一些(自动将生成的HTML标签的id属性设置为等于name属性,除非明确给出id属性。

有没有办法使用这些自定义标签来生成没有 id 属性的 HTML 标签?我尝试将 id 属性设置为空字符串,但生成的代码将 id 设置为名称。

我知道我可以使用自定义标签来做到这一点,但我想知道是否有更简单的方法。

似乎是不可能的。FormTagLib.groovy类的源代码显示,有一个标志决定在没有给出 id 的情况下是否编写与名称相同的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)
    }
}

此方法调用将生成实际 id 的outputNameAsIdIfIdDoesNotExist...。由于outputAttribues总是收到true,因此无法执行任何操作来覆盖它。

相关内容

  • 没有找到相关文章

最新更新