Grails:views文件夹中的Javascript文件

时间:2009-06-20 19:58:48

标签: javascript grails gsp

我想将我在Grails中的视图拆分为2个文件,一个.gsp文件和一个.js文件,以便从我的视图中获得更清晰的Javascript分离。所以这是一个例子:

views/index.gsp
views/index.js
views/home/index.jsp
views/home/index.js

但是当我只是像这样添加index.js脚本引用时:

<script src="index.js" type="text/javascript"></script>
我得到的只是404。

有谁知道如何处理这个问题?

一个很大的好处是能够在index.js文件中使用视图数据来生成所需的内容。

马提亚。

4 个答案:

答案 0 :(得分:4)

实际上,完全可以从您的grails-app/views/目录中将JS文件(或任何其他文件类型)作为GSP提供。您唯一需要做的就是为这些GSP定义合适的URL映射,例如:

"/javascript/home/index"(view:'/home/index.js')

使用此URL映射,您可以将JS代码放入grails-app/views/home/index.js.gsp(注意尾随.gsp),并且可以在JS源代码中使用任何grails标记。为确保您的JS以正确的内容类型提供,您可能需要放置

<%@ page contentType="text/javascript"%>

在您的GSP开头。

不幸的是,createLink标记不支持链接重写到视图,但是编写自己的标记以创建这些链接应该很容易。

无论如何,请记住,这不会对您应用的效果产生非常积极的影响。例如,将动态内容作为参数传递给JS函数时,通常更好的是拥有静态JS文件(并将它们作为静态资源提供)。这也将使您免于一些令人头疼的问题。缓存等。

答案 1 :(得分:0)

更新2:

Grails提供了使用custom events挂钩构建生命周期的可能性。

可以编写一个事件处理程序,将grails-app/views下的所有javascript文件与目标文件夹web-app/js同步。

将自定义代码放在$ PROJECT / scripts / Events.groovy中。 PackagingEnd是调用的一个很好的目标,因为它是在生成web.xml之后发生的。

eventPackagingEnd = {  ->
     // for each js file under grails-app/views move to web-app/js
}

<强>更新

如果您想将javascript文件简单地“拼接”在一起,您可以使用符号链接来实现,例如:

grails-app / views / view1 / index.js - &gt; web应用/ JS /厂景/ index.js

据我所知,没有办法强制grails直接提供web-app之外的内容。

或者,您可以将javascript内联,但这可能会影响性能。


Javascript文件属于web-app/js

然后您可以使用<g:javascript src="index.js" />引用它们。

答案 2 :(得分:0)

这个想法很好,但Grails有这个目录结构是有原因的。视图文件夹适用于某种工件类型(视图)..

你可以在web-inf下克隆你的视图文件夹结构,但这会给你更多的工作,因为我猜这背后的想法是为了方便起见将相关文件保持在一起。

即使我不喜欢将Javascript与视图一起存储,我也很喜欢Robert通过使用构建事件将javascript源复制到正确的目录来挂钩构建过程的想法!如果您决定沿着这条路走下去,那么您可能会在使用它时压缩信号源。 ShrinkSafe是受欢迎的图书馆。

答案 3 :(得分:0)

我认为您不允许访问views /

中的js

如果你需要这样做......这就是诀窍

  1. 创建你的js并用 myjs.gsp重命名(使用“”) iniside _myjs.gsp输入你js
  2. ...在这里写下你的js ...
      你在gsp里面的
    1. (例如:index.gsp,view.gsp等) 输入此标记即可上传js