代码之家  ›  专栏  ›  技术社区  ›  iberck

理解Tapestry原则1。“静态结构,动态行为”

  •  1
  • iberck  · 技术社区  · 14 年前

    “静态结构,动态行为”,这是什么意思?

    如果不向组件添加组件,如何创建动态页面?

    有人能帮我吗?

    3 回复  |  直到 14 年前
        1
  •  1
  •   Henning    14 年前

    这意味着您无法在运行时有效地选择或替换组件。

    比如说,如果您想构建一个门户解决方案,用户可以按照自己的意愿在屏幕上排列组件,Tapestry就不会提供一种有效的方法来实现这一点,因为组件具有静态结构,即您必须在编译时在模板文件中定义进入组件的内容。

    Menu 具有派生组件的组件, AdminMenu -但你不能,你必须使用 if 语句或使用块将不同的菜单插入到布局组件中。

    与此限制相关的是一种反模式:God或ber组件试图通过有效地拥有一个包含所有可用组件的巨大模板文件来解决此问题,如下所示:

    <t:if t:test="displayComponentA">
         <span t:type="ComponentA" ... />
    </t:if>
    <t:if t:test="displayComponentB">
         <span t:type="ComponentB" ... />
    </t:if>
    ...
    

    然而,当Tapestry组装 整个的 组件树,包括未显示的组件,用于呈现页面。

        2
  •  0
  •   Boris Pavlović    14 年前

    Tapestry使用模板来定义静态内容。这些模板通常是带有占位符变量的html页面,占位符变量由框架动态地替换为一些代码。模板允许将不改变的事物与改变的事物分离开来。通常结构比行为更不容易改变。即使您想动态地更改组件的某些元素,您也要使用由动态填充数据的模板定义的组件。这个动态数据可以再次插入其他组件等。

        3
  •  0
  •   Thiago H. de Paula Figueiredo    14 年前

    静态结构并不意味着不能输出动态内容,也不意味着不能向组件添加组件。你不能在运行时将一个组件添加到另一个组件中。您可以使用其他组件定义页面或组件结构,但这些都是在呈现页面之前在模板中定义的,而不是在呈现页面时定义的。组件可以选择不渲染自身,渲染其模板的一部分(如果和除非组件),等等。

    Tapestry的静态结构导致的少数实际情况之一是组件C不能在其中使用同一组件的另一个实例。