1

我有一个使用大量包含文件的页面。它动态选择要使用的正确包含文件。我希望(在包含文件中)能够向 grails 指定我希望它在运行中将特定<link rel="stylesheet"/>标签包含到头部中。

像这样的输出..

<html>
  <head>
    <title>My Life :: My Pets</title>
    <link rel="stylesheet" href="style.css" type="text/css"> <!-- Normal Site Style -->
    <link rel="stylesheet" href="include-my-pets" type="text/css"> <!-- Dynamic Style for Include -->
  </head>
  <body>
    <h1>My Pets</h1>
    <!-- This is the include file start -->
       In the GSP here I said something like:
       <r:require disposition="head">
         <link rel="stylesheet" href="include-my-pets" type="text/css"> <!-- Dynamic Style -->
       </r:require>
       to get the CSS link tag pushed into the head.
    <!-- This is the include file end -->
  </body>
</html>

这对我使用<r:script/>标签非常有效。我可以在任何包含文件中指定任何位置:

<r:script disposition="head">
  alert ('hello')
</r:script>

我的布局会自动将警报 hello 卡在<script/>页面头部的标签内。它也从身体中移除。

4

3 回答 3

1

资源插件不支持此功能。如果您查看 ResourcesPlugin 中的 r.script 实现:

def script = { attrs, body ->
    def dispos = attrs.remove('disposition') ?: 'defer'
    storePageFragment('script', dispos, body())
}

为“r.stylesheet”标签做类似的事情似乎很容易,但 storePageFragment 和其他辅助方法是私有的,所以如果不复制很多东西,你就不能从外面做。

我建议你分叉资源插件,沿着脚本标签的行实现样式表标签并发送拉取请求。

于 2012-11-21T10:24:03.547 回答
0

资源插件的优点是,您可以创建资源的逻辑组(css 和 js)并在需要的地方使用它们。Alo 不要忘记<r:layoutResources />headsectioc 结束时和body部分结束时调用。否则,资源将无法正确生成。

于 2012-11-21T08:39:10.180 回答
0

这不是“grails”做事的方式,但这就是我实现它的方式。我这样做的部分原因是因为我觉得在 ApplicationResources.groovy 中定义资源对于不熟悉资源插件的非 grails 开发人员来说可能并不明显。我更喜欢在包含文件中有明确的资源链接的想法,这是显而易见的。

我现在的做法就是这样。

Kitty 和 Doggy 需要自定义 CSS 和 JavaScript(它们都是 pets 的一部分),但其他链接(例如 MyLife)不需要它们。

在 URLMappings.groovy

"/mypets/kitty" {
    controller="pets",
    subpage="kitty.gsp"
    action="index"
    css="kitty.css",
    js="kitty.js",
}
"/mypets/doggy" {
    controller="pets",
    subpage="doggy.gsp"
    action="index"
    css="doggy.css",
    js="doggy.js",
}
"/mylife" {
    controller="life",
    action="index"
}

布局.gsp

...contains all the usual site-wide resources...

在 pets.gsp 中

<html>
  <head>
    <title>${title}</title>
    <link rel="stylesheet" type="text/css" href="${resource(dir: 'resources/modules/css', file: css)}"/>
    <script src="${resource(dir: 'resources/modules/js', file: js)}"></script>
  </head>
  <body>
    Select your pet: <select.../>
    <!-- It's kitty.gsp and doggy.gsp (below) that need access to their own kitty and doggy js and css files -->
    <g:include view="$page"/>
  </body>
</html>
于 2012-11-21T10:03:37.190 回答