6

我的结构如下:

嗨有一个标题模板名为“标题”它看起来像这样

div.span4
    block headingleft
div.span3
    block headingright

我想要实现的是,从我的主页上,我想为左标题和右标题传递块值,即类似

div
include heading
    block headingleft
          a IamLeft 
    block headingright
          a IamRight

但是代码的行为是:不是将“IamLeft”放在 .span4 中,将 IamRight 放在 .span3 中,而是将两者都放在 .span3 下,就好像它只是普通的翡翠附加一样

4

1 回答 1

9

我会尝试一下并解释一些要点,因为您可能混淆了一些玉器技术并且对“块”的定义感到困惑。

我将为您提供两个针对您的用例的示例(稍作修改):

包括

使用包含技术意味着您将主(布局)模板的内容替换为其他模板文件的内容。当包含其他翡翠模板文件时,您可以将其他内容传递给包含的文件,以便在某个地方附加或生成。

主玉

div
  include heading
    div.span3
      a IamSomewhatRight

标题.玉

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如下所述。

如果您在主模板中定义块,则可以扩展此模板以供具体使用并描述如何替换这些块 - 这是在您继承的模板中完成的:

主玉

div
  block headingleft
  block headingright

标题.玉

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 回答