如何让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 中?
你不能 append
或 html
那样的 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")
的重要性。
我正在使用以下代码在 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 中?
你不能 append
或 html
那样的 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")
的重要性。