我正在尝试使用javascript创建动态HTML表。我写了一个小函数来动态地向表中添加行。然而,单个细胞本身应该是gsp标签元素。在下面的示例中,我尝试使用grails-UI插件提供的autoComplete标记。即使我将单元格的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标签?
答案 0 :(得分:2)
GSP页面在服务器上呈现,很久很久就在浏览器EVER获取html之前,并且可以开始运行Javascript。您需要使用AJAX调用将gsp标记发送回服务器,在那里它可以(希望)呈现为HTML,然后从AJAX响应中获取HTML并将其插入到文档中。
答案 1 :(得分:0)
在渲染到浏览器之前评估GSP。如果你想让javascript使用它们,那么jils源必须由grails引擎提供/评估。
您可以为js创建一个控制器,并使用gsp将其呈现为grails应用程序的任何其他页面。