我想知道是否有可能对 *.js 文件进行后处理,以便可以计算每个 gsp 表达式。
例如,我可以直接在 GSP 页面中编写以下代码:
<script type="text/javascript">
$.post("${createLink(controller:'mycontroller',action:'myaction')} " , {"id":id},function(){});
</script>
表达式 ${createLink} 由 grails 计算。
但是我也想在*.js文件中使用${createLink()},这些文件不是由grails处理的。也许可以使用资源插件对每个 *.js 文件进行后处理并评估 gsp 表达式?
当然,我可以将所有 js 代码包装在一个单独的 gsp 页面中,但这似乎不是一个优雅的解决方案。
任何帮助将不胜感激。
这两种方法都适合您
- http://grails.org/plugin/gsp-arse(独立)
- http://grails.org/plugin/gsp-resources(它适用于资源插件)
另一种选择是执行类似于将 url 存储在变量中的
操作<script type="text/javascript">
var url = "${createLink(controller:'mycontroller',action:'myaction')}";
</script>
然后,您可以使用所需的所有 ajax 调用,并且仍然只设置一次 url。
在 GSP 文件中使用 JS 哈希来保存重要内容
<r:script>
var linkobject={
mylink:'${createLink(controller:"mycontroller",action:"myaction")}',
linkA : '${params.id}',
linkB: '${g.createLink(action: "getThreats")}',
linkC: '${g.createLink(action: "addThreat")}',
linkD: '${g.resource(dir: 'images/icons', file: 'folder.png')}'
}
</r:script>
然后,在您的 JavaScript 文件中使用该 JS 哈希来获取您需要的内容:
$.post(linkobject.mylink , {"id":linkobject.linkA},function(){});