3

我想将 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

4 回答 4

4

实际上,完全可以将 JS 文件(或任何其他文件类型)作为 GSP 从您的grails-app/views/目录中提供。您唯一需要做的就是为这些 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 文件(并将它们作为静态资源提供)。这也将使您免于头痛。缓存等

于 2009-06-20T22:47:00.950 回答
0

更新 2:

Grails 提供了使用自定义事件连接到构建生命周期的可能性。

可以编写一个事件处理程序,将其下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 -> webapp/js/view1/index.js

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

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


JavaScript 文件属于web-app/js.

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

于 2009-06-20T20:01:14.530 回答
0

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

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

尽管我对将 Javascript 与视图一起存储并不感到兴奋,但我喜欢 Robert 的想法,即通过使用构建事件将 javascript 源复制到正确的目录中来连接到构建过程!如果您决定走这条路,您不妨在使用时压缩源。ShrinkSafe是流行的库。

于 2009-06-21T04:24:46.563 回答
0

我认为您不允许在视图中访问 js/

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

  1. 创建你的 js 并用myjs.gsp 重命名(使用“ ”) iniside _myjs.gsp 输入你的 js
...在这里写下你的js ...
  1. 在你的 gsp 里面(例如:index.gsp、view.gsp 等)输入这个标签来上传你的 js

于 2009-06-25T04:52:03.003 回答