2011-09-16 11 views
3

私はGrails GSPのテンプレート/レイアウトのコンセプトについてたくさんのことをしてきました。私はASPのマスターページの動作を模倣するためにレイアウト/コンテンツブロックを使用しています。例えばASPのContentPlaceHolderに相当するGrails GSPとは何ですか?

、私は<content>タグを使用して上書きすることができ、 "プレースホルダ" を残すために、テンプレートにタグ<g:pageProperty />を使用しています:

myTemplate.gsp:

<body> 
    <g:pageProperty name="page.topDiv" /> 
</body> 


myPage.gsp:

<html> 
    <head> 
     <meta name="layout" content="myTemplate"></meta> 
    </head> 
    <body> 
     <content tag="topDiv"> 
      My top div 
     </content> 
    </body> 
</html> 

これは、テンプレート内のいくつかの箇所にコンテンツを「追加」するのに適しています。しかし、私は実際にはASP.NETのマスターページで取得できる動作を望んでいます...コンテンツの「デフォルト」レンダリングを提供し、オプションのオーバーライドを許可します。 ASP.NETマスターページでは、次のようになります。

myMaster.master:

<asp:ContentPlaceHolder id="something" runat="server"> 
    <div>Default text/html here</div> 
</asp:ContentPlaceHolder> 


someOtherPage.aspx:

<asp:Content contentPlaceHolderId="something" runat="server"> 
    Overriden content here!! I don't need to override this though :) 
</asp:Content> 


私の質問:
同じデフォルト/ ovを実行することはできますかGrailsのGSPで振る舞いを隠す?

答えて

2

これを達成できる日は数日あります。 g:pagePropertyはSitemesh decorator:getPropertyタグに相当するため、default属性を使用して、使用するデフォルトのテキストを指定することができます。例:

<g:pageProperty name="page.topDiv" default="Default text/html here"/> 

ただし、そこにHTMLコンテンツを取得するクリーンな方法はわかりません。それが存在しない場合は、そのプロパティをテストし、デフォルトの動作を指定するg:ifタグを使用することができます。

<g:if test="${pageProperty(name:'page.topDiv')}"> 
     <g:pageProperty name="page.topDiv"/> 
    </g:if> 
    <g:else> 
     <div>Default text/html here</div> 
    </g:else> 

デフォルトの内容は、外部テンプレートGSPに住むことができます。この場合には、デフォルトのコンテンツは_topDiv.gspに配置されることになる

<g:pageProperty name="page.topDiv" default="${render(template:'topDiv')}"/> 

render方法は、g:pagePropertyのデフォルト属性でそのコンテンツを表示するために使用することができます。

+0

ジェイソン、ありがとうございます!私はデフォルトの属性に 'render'呼び出しを置くことについて考えることさえしませんでした...レンダー呼び出しをデフォルトの属性に置くことはすごくうまくいきます。ありがとう! – Polaris878

1

代わりに試してみてください。

<g:render template=""><g:render> 
関連する問題