2012-10-24 28 views
6

我的药结构如下:玉3.x的模板:传递块包括

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

div.span4 
    block headingleft 
div.span3 
    block headingright 

什么,我试图实现是,从我的主网页我想通过块值headingleft和航向正确的,即像

div 
include heading 
    block headingleft 
      a IamLeft 
    block headingright 
      a IamRight 

但对于代码的行为是:不是把“IamLeft”在.span4和IamRig在.span3中它将两个都放在.span3下,好像它只是普通的玉石追加

回答

9

我会试一试并解释一些必需品,因为你可能混合了一些玉石技术,并被定义所困惑“块”。

我给你两个例子针对您的用例(略有修改):

包括

使用包括技术手段,你在你的主人(布局)模板的替代内容其他模板文件的内容。当包含其他玉模板文件时,可能会将附加内容添加到包含的文件中,以便在某个位置附加或放弃。

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 

标题。玉

extends main 

block headingleft 
    div.span4 
    a IamLeft 

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

结果是完全一样的结果中的“包括”的例子。当然,将heading.jade转换为myview.jade并涵盖整个页面生成过程可能是有意义的。

现在,有不同的情况和要求使用包含或块或两者结合以各种方式组合您的意见(这是哲学的一种!)。在我看来,使用继承是消除重复几个“主要文件”的好方法 - 或者某种基于控制器的视图组合技术定义占位符变量(或任何其他),这往往会导致混乱的代码不遵循“分离关注点“的方法。

+0

嘿感谢您的解释,我已经知道大部分,但我试图实现的东西(即重复使用模板在特定的地方)使用块+包括其实应该通过yield + include来接近。谢谢。 – user1583920