如何从Controller向GSP视图发送Javascript代码?

时间:2013-05-13 10:00:06

标签: javascript grails rendering

我想从控制器向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语句)

2 个答案:

答案 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将不再存在。例如:

  • 转到myaction;
  • Flow将重定向到编辑;
  • 如果您刷新页面,欢迎将被打印。