6

私の構造は次のとおりです。

こんにちは、「heading」というテンプレートの見出しがあります。

div.span4
    block headingleft
div.span3
    block headingright

私が達成しようとしているのは、メインページから、headingleftとheadingrightのブロック値を渡したいということです。

div
include heading
    block headingleft
          a IamLeft 
    block headingright
          a IamRight

ただし、コードの動作は次のとおりです。「IamLeft」を.span4に、IamRightを.span3に配置する代わりに、通常のヒスイの追加であるかのように、両方を.span3に配置します。

4

1 に答える 1

9

おそらくいくつかの翡翠のテクニックを混同していて、「ブロック」の定義に混乱しているので、試してみて、いくつかの重要事項を説明します。

ユースケースを対象とした2つの例を(わずかな変更を加えて)示します。

含む

インクルード手法を使用すると、マスター(レイアウト)テンプレートのコンテンツを他のテンプレートファイルのコンテンツに置き換えることができます。他のヒスイのテンプレートファイルを含める場合、追加のコンテンツをインクルードされたファイルに渡して、どこかに追加または生成することができます。

main.jade

div
  include heading
    div.span3
      a IamSomewhatRight

heading.jade

div.span4
  a IamLeft
div.span3
  a IamRight

結果:

 div
   div.span4
     a IamLeft
   div.span3
     a IamRight
   div.span3
      a IamSomewhatRight

ご覧のとおり、追加およびオプションのコンテンツ、つまり以下のブロックinclude headingは、デフォルトでインクルードファイルのコンテンツに追加されます。キーワードyieldを使用して、置換の正確な場所を定義します。これは、以下で説明するキーワードによって定義されるブロック定義とは関係がないことに注意してください。block

ブロック

マスターテンプレート内でブロックを定義する場合、具体的な使用のためにこのテンプレートを拡張し、これらのブロックを置き換える方法を説明できます。これは、継承されたテンプレート内で行われます。

main.jade

div
  block headingleft
  block headingright

heading.jade

extends main

block headingleft
  div.span4
    a IamLeft 

block headingright
  div.span3
    a IamRight
  div.span3
    a IamSomewhatRight

結果は、「含む」の例の結果とまったく同じです。もちろん、ここであなたheading.jadeをいくつかに変換しmyview.jade、ページ生成全体をカバーすることは理にかなっているかもしれません。

現在、インクルードまたはブロック、あるいはその両方をさまざまな方法で組み合わせてビューを構成するためのさまざまな状況と要件があります(これは一種の哲学です!)。継承を使用することは、私の意見では、いくつかの「メインファイル」の繰り返しを排除するための優れた方法です。または、プレースホルダー変数(またはその他)を定義するコントローラーベースのビュー合成手法の一種であり、多くの場合、「関心の分離」アプローチ。

于 2012-10-25T10:10:49.397 に答える