我正在尝试使用javascript创建一个动态HTML表。我编写了一个小函数来动态地向表中添加行。然而,单个单元格本身应该是gsp标签元素。在下面的例子中,我尝试使用grails-UI插件提供的自动完成标记。即使我将单元格的innerHTML设置为gsp标记,它也不会在页面上呈现。
function addIngredientRow(tableName,element){
var table = document.getElementById(tableName);
var lastRow = table.rows.length;
var row = table.insertRow(lastRow);
var leftCell = row.insertCell(0);
var autoCompleteDiv = document.createElement('div');
leftCell.appendChild(autoCompleteDiv);
autoCompleteDiv.innerHTML= '<gui:autoComplete id="autoCompleteIngredient" resultName="ingredients" labelField="name" idField="id" controller="recipe"
action="getIngredientAsJSON" forceSelection="true"
useShadow="true" width=60px queryDelay=0.5 />';
var rightCell = row.insertCell(1);
var autoCompleteDivR = document.createElement('div');
rightCell.appendChild(autoCompleteDivR);
autoCompleteDivR.innerHTML= '<p>test</p>';
}
调用该代码的HTML片段如下:<tr>
<td>
<gui:autoComplete
id="autoCompleteIngredient"
resultName="ingredients"
labelField="name"
idField="id"
controller="recipe"
action="getIngredientAsJSON"
forceSelection="true"
useShadow="true"
width=60px
queryDelay=0.5
/>
</td>
<td>
<div onclick="addIngredientRow('createRecipeTable',this)"><img alt="Add Ingredient" src="${resource(dir:'images/icons',file:'Add16.png')}" ></div>
</td>
</tr>
我已经检查了javascript正在通过放置警报来调用。所有的线路都没问题。我认为问题是通过浏览器解决gsp标签。我如何从javascript调用gsp标签??
GSP页面在服务器上呈现,在浏览器获得html并开始运行Javascript之前很久很久。您需要使用AJAX调用将gsp标记发送回服务器,在那里它可以(希望)呈现为HTML,然后从AJAX响应中获取HTML并将其插入到文档中。
gsp在呈现给浏览器之前被评估。如果你想让javascript使用它们,javascript源代码必须由grails引擎提供/评估。
您可以为js创建一个控制器,并使用gsp将其呈现为grails应用程序中的任何其他页面。