我想从控制器向GSP视图发送一些JS脚本。 我做了以下尝试。
控制器(Purchase.groovy):
def myaction={
flash.script= 'jQuery("div#header").show(1000);'
redirect(action:'edit')
}
在 purchase / myaction.gsp 文件中, 我尝试以下代码
<g:if test="${flash.script !=null}">
<g:javascript>
$(function() {
${flash.script}
})
</g:javascript>
</g:if>
<g:else>
<g:javascript>
$(function() {
alert('Welcome')
})
</g:javascript>
</g:else>
我还尝试:jQuery.getScript('${flash.script}')
代替'${flash.script}'
但是,GSP页面始终呈现第二个脚本(else语句)
答案 0 :(得分:4)
首先,务必在dom加载后调用该函数;你可以使用像
这样的jquery $( document ).ready(function() {
call_function();
});
您可以将js代码表单控制器作为映射发送,而不是通过闪存并重定向到另一个操作。见下文:
def myaction={
redirect(action:'edit', customJs: 'jQuery("div#header").show(1000);')
}
def edit={
render view: 'someView', model:[customJs: customJs]
}
并且在视野中:
<g:javascript>
$(function() {
<%= customJs %>
})
答案 1 :(得分:1)
flash.script
很好,我在这里测试过它的确有效。会发生什么是flash
对象用于转换,并且仅在下一个请求中可用。如果您的网页被重定向到edit
并刷新了edit
,那么Flash将不再存在。例如: