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

How to make GSP tag generate code on one line?

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

$('#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 标签扩展为单行字符串,以便 select 框可以动态嵌入到 div 中?

你不能 appendhtml 那样的 grails 代码。

你想使用 html 代码。

var youComboboxCode = "<select><option>aaaa</option><option>bbb</option></select>";

$('#worker').html(youComboboxCode);

我会分享我的代码

 var htmlcodeA = '';

if(data)
{
   for (var i = 0; i < data.length; i++) {
     htmlcodeA = htmlcodeA + "<option value="+data[i].id+">"+data[i].purchaseNo+"</option>";
   }
}

$('#home').find('option').remove();
$('#home').html(htmlcodeA ).change();

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 放在一行上。


最初,我不确定自己到底是什么导致 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") 的重要性。