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

标签 javascript grails gsp

我使用以下代码在 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/

相关文章:

Grails:404 和延迟初始化

validation - 检查 hasErrors 和验证后将错误返回到 Grails 中的 gsp 页面

html - 如何在 Grails g :selects? 中实现虚拟值

javascript - 使用 XAMPP 将 CSS 和 Javascript 文件链接到本地​​主机服务器上的 HTML 文件

javascript - 为什么 Typescript 在转译代码中将 .default() 添加到类构造函数中?

javascript - 钛合金主干及ACS

java - Grails 中的 Groovy Shell 包含我的 grails .lib/文件夹

javascript - 在 Mithril JS 中等待 AJAX 请求时如何显示微调器?

ssl - 如何使用 Jetty 插件在 Grails 应用程序中启用 SSL

javascript - Grails:如何根据 GSP 表单中的选择显示数据源中的数据