gpt4 book ai didi

javascript - 如何让GSP标签生成一行代码?

转载 作者:行者123 更新时间:2023-12-03 05:23:41 24 4
gpt4 key购买 nike

我使用以下代码在 div 元素内动态添加一个选择框:

$('#worker').html('<g:select class = "dropdown" name="worker" from="${workers}" optionKey="id" optionValue="name" />');

这段代码的问题在于,当g:select标签展开时,会生成如下代码:

    $('#worker').html('<select onchange="handleWorkerChange(this)" class="dropdown" name="worker" id="worker" >
<option value="2" >Worker1</option>
<option value="4" >Worker1</option>
<option value="18" >Worker1</option>
<option value="19" >Worker1</option>
</select>');

正如您在上面看到的,展开时,选项标签位于换行中,因此这将导致 JavaScript 中的语法错误。有没有办法让 select gsp 标签扩展为单行字符串,以便选择框可以动态嵌入到 div 中?

最佳答案

g:select 也可用作 method within the GSP :

${select(from:aList,value:aValue)}

利用这一点以及我们只是处理文本 (org.codehaus.groovy.grails.web.util.StreamCharBuffer) 的事实,我们可以删除新行字符:

$('#worker').html('${ select(
class: 'dropdown',
from: workers,
optionKey='id',
optionValue: 'name',
name: 'worker'
).replace(System.getProperty("line.separator"), '') }');

这应该导致整个选择被放置在一行上。

<小时/>

最初,我不确定自己到底是什么导致 select 被放置在多行中,所以我直接找到了源代码:FormTagLib .

来自 FormTagLib 的片段:

writer << "<select "
// process remaining attributes
outputAttributes(attrs, writer, true)

writer << '>'
writer.println()

如您所见,这只是一个简单的 println 方法调用:

Terminates the current line by writing the line separator string. The line separator string is defined by the system property line.separator, and is not necessarily a single newline character ('\n').

这就是为什么使用 System.getProperty("line.separator") 很重要。

关于javascript - 如何让GSP标签生成一行代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41255627/

24 4 0