Grails:views文件夹中的Javascript文件

Grails:views文件夹中的Javascript文件,javascript,grails,gsp,Javascript,Grails,Gsp,我想将Grails中的视图分为两个文件:一个.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> 我得到的

我想将Grails中的视图分为两个文件:一个.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文件中的视图数据生成所需的内容


Matthias.

更新2:

Grails提供了使用连接到构建生命周期的可能性

可以编写一个事件处理程序,将
grailsapp/views
下的所有JavaScript文件与
webapp/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 -> webapp/js/view1/index.js
据我所知,没有办法强迫grails直接提供web应用程序之外的内容

或者,您可以内联JavaScript,但这可能会影响性能


JavaScript文件属于
webapp/js


然后您可以使用

引用它们实际上,完全可以从您的
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"%>

在普惠制开始时

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


无论如何,请记住,这不会对应用程序的性能产生非常积极的影响。例如,在将动态内容作为参数传递给JS函数时,通常最好使用静态JS文件(并将其用作静态资源)。这也会让你免于一些头痛。缓存等。

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

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


尽管我对将Javascript与视图一起存储并不感到兴奋,但我喜欢Robert的想法,即通过使用构建事件将Javascript源代码复制到正确的目录中,从而连接到构建过程中!如果你决定沿着这条路走下去,你可能会压缩源代码。这是一个很受欢迎的图书馆

我认为不允许您访问js内部视图/

如果你需要这样做。。。这里是诀窍

  • 创建您的js并用myjs.gsp重命名(使用“”) iniside _myjs.gsp类型您的js
  • ... 在这里写下你的名字。。。
  • 在gsp内部(例如:index.gsp、view.gsp等) 键入此标记以上载js

  • 是的,。。。我有点害怕有人会这么说。在我看来,这正是我想要避免的。我不想这么说,但在应用程序的两个遥远的部分中拥有相同的视图,而这两个部分并没有真正结合在一起是没有帮助的。所以还有其他想法吗?使用符号链接也不是一个选项,因为并非所有操作系统(例如Windows)都有:(我需要一个更通用的解决方案。此外,像index.gsp文件那样处理index.js会很好,这意味着index.js文件可以生成它的某些部分,而不是完全静态的。我将把这一点添加到问题中好吧,我明白你的意思。但是,这有另一个缺点:每次Javascript文件ges服务器需要重新启动才能进行构建过程。我想这只是Grails不能做的事情之一……不过感谢您的帮助。