1

非常に多くのインクルード ファイルを使用するページがあります。使用する正しいインクルード ファイルを動的に選択します。<link rel="stylesheet"/>(インクルード ファイルで) grails に特定のタグをその場でインクルードするように指定できるようにしたいと思います。

このような何かが出力されます..

<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/>そして、私のレイアウトでは、ページの先頭にあるタグ内にアラート hello が自動的にスタックされます。本体からも取り外します。

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の両方)を作成し、必要な場所でそれらを使用できることです。アロは、セクションの終わりとセクションの<r:layoutResources />終わりに電話することを忘れないでください。それがないと、リソースは正しく生成されません。headbody

于 2012-11-21T08:39:10.180 に答える
0

これは物事を行うための「Grails」の方法ではありませんが、これが私がそれを実装した方法です。私がこれを行った理由の一部は、ApplicationResources.groovyでリソースを定義することは、リソースプラグインに精通していない非grails開発者には明らかではないかもしれないと感じているためです。私は、明白なインクルードファイルに明示的なリソースリンクを含めるというアイデアを好みました。

私が今それをした方法はそのようなものです。

KittyとDoggyはカスタムCSSとJavaScript(どちらもペットの一部です)を必要としていましたが、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"
}

layout.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 に答える