我想将我在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文件中使用视图数据来生成所需的内容。
马提亚。
答案 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如果你需要这样做......这就是诀窍