Grails:如何使用资源插件在头部添加 CSS "link" 标签?



我有一个页面使用了很多包含文件。它会动态选择要使用的正确包含文件。我希望(在包含文件中)能够向圣杯指定我希望它在头部包含一个特定的<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>

我的布局会自动将警报问候卡在页面头部的<script/>标签内。它也从体内取出。

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

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

对于"r.stylesheet"标签做类似的事情似乎很容易,但是storePageFragment和其他帮助程序方法是私有的,因此如果不复制大量内容,就无法从外部执行此操作。

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

资源插件的优点是,您可以创建资源的逻辑组(css 和 js)并在需要时使用它们。阿洛不要忘记在head教派的末尾和body部分的末尾打电话给<r:layoutResources />。否则,资源将无法正确生成。

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

我现在的做法是这样的。

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

In 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...

在宠物.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>

最新更新