如何从JavaScript和Grails访问变量?
我有一个JASONList类型的变量,它在模板中呈现 有没有办法从JavaScript函数内部访问此列表 假设我想调整大小以适应屏幕上的所有对象。无需进行数据库调用并从Ajax重新读取整个列表 假设模板执行以下操作:如何从JavaScript和Grails访问变量?,javascript,grails,gsp,Javascript,Grails,Gsp,我有一个JASONList类型的变量,它在模板中呈现 有没有办法从JavaScript函数内部访问此列表 假设我想调整大小以适应屏幕上的所有对象。无需进行数据库调用并从Ajax重新读取整个列表 假设模板执行以下操作: <g:each var="report" in="${reportList?.myArrayList}"> <li style="display:inline; list-style:none;"> <img src=" ${report
<g:each var="report" in="${reportList?.myArrayList}">
<li style="display:inline; list-style:none;">
<img src=" ${report?.img}">
</li>
</g:each>
<script type="text/javascript">
function resize(list) {
if (list.size <givenSize) // Pseudocode
list.subList() // Pseudocode
}
window.onresize = resize("${reportList}")
</script>
<g:each var="report" in="${reportList?.myArrayList}">
<li style="display:inline; list-style:none;">
<img src=" ${report?.img}">
</li>
</g:each>
<%= """<script type=\"text/javascript\">
function resize(list){
if(list.size <givenSize) //posudo code
list.subList() // psudocode
}
window.onresize = resize(\"$reportList\")
</script>""" %>
函数调整大小(列表){
if(list.size我不知道,但Grails可能不想在script
标记中计算表达式。动态生成的脚本不是很好的做法
但在找到确切的原因之前,你可以尝试以下方法:
<g:each var="report" in="${reportList?.myArrayList}">
<li style="display:inline; list-style:none;">
<img src=" ${report?.img}">
</li>
</g:each>
<script type="text/javascript">
function resize(list) {
if (list.size <givenSize) // Pseudocode
list.subList() // Pseudocode
}
window.onresize = resize("${reportList}")
</script>
<g:each var="report" in="${reportList?.myArrayList}">
<li style="display:inline; list-style:none;">
<img src=" ${report?.img}">
</li>
</g:each>
<%= """<script type=\"text/javascript\">
function resize(list){
if(list.size <givenSize) //posudo code
list.subList() // psudocode
}
window.onresize = resize(\"$reportList\")
</script>""" %>
Grails变量仅存在于服务器端。JavaScript在浏览器(客户端)中运行。发送到浏览器的所有内容都是字符串,因此,虽然可以使用Grails生成一段JavaScript,如window.onresize=resize(${reportList}”)
,但浏览器将只看到${reportList}的字符串
计算结果为
这意味着,如果使用Grails将变量传递给resize()
JavaScript函数,参数(list
)将永远只是一个字符串-您将无法访问服务器端列表方法,如list.size
或list.subList()
,因为list
变量不再是一个列表;它只是一个字符串。我不确定为什么您的${reportList}被呈现为${reportList},因为当我执行以下操作时:
var t = "${taskList}";
我在HTML中获得以下内容:
var t = "[com.wbr.highbar.Task : 1, com.wbr.highbar.Task : 4, com.wbr.highbar.Task : 2, com.wbr.highbar.Task : 5]";
也就是说,您仍然会遇到问题,因为JavaScript不知道如何处理您的报表列表基本上,如果您在Grails中使用POJO,Grails as JSON转换不是很智能。它所做的只是在对象上进行toString,而不是潜在地查看所有公共访问器,等等
这有点令人失望,但基本上我需要在我的POJO的toString方法中创建JSON转换。是的,获取子列表和大小只是psudo代码。。无论如何,它都是对象的JSON表示……但是由于GSP是在服务器上呈现的,所以在将JSON对象发送到函数时应该填充它,对吗?@user:实际上我并不熟悉Grails/GSP(JSP更像我的东西),但只要您将解析后的JSON传递到JavaScript函数中,就应该没问题了。呃,好吧,是的,我认为这就是断开连接,对${reportList}的引用作为字符串表示而不是它所表示的JSON对象发送,可能我需要在服务器端以控制器支持的变量处理这个问题………我解决了我的问题,基本上,如果在grails中使用POJO,grails as JASON转换不是很聪明,它所做的只是在对象上执行toString可能会查看所有的公共访问器等…(有点令人失望,但基本上我需要在POJO的toString方法中创建JSON转换)