2

我想将一些 JS 脚本从控制器发送到 GSP 视图。我做了以下尝试。

控制器(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 语句)

4

2 回答 2

5

首先,一定要在dom加载完成后调用该函数;你可以像使用 jquery

  $( document ).ready(function() {
     call_function();
  });

您可以将 js 代码表单控制器作为地图发送,而不是通过 flash 和重定向到另一个动作。见下文:

 def myaction={
    redirect(action:'edit', customJs: 'jQuery("div#header").show(1000);')
 }

 def edit={
   render view: 'someView', model:[customJs: customJs]
}

并认为:

 <g:javascript>
$(function() {

        <%= customJs %>
})

于 2013-05-13T10:45:31.907 回答
1

flash.script很好,我在这里测试过,它可以工作。发生的情况是该flash对象用于转换,并且仅在下一个请求中可用。如果您的页面被重定向到edit并且您刷新edit,则 flash 将不再存在。例子:

  • 转到我的行动;
  • 流程将重定向到编辑;
  • 如果刷新页面,将打印欢迎。
于 2013-05-13T14:23:40.807 回答