我正在学习tapestry 5 web框架,但我不明白关于它的原则1:“静态结构,动态行为”,这是什么意思?
如果我不向组件中添加组件,我如何创建动态页面?
有人能帮我吗?提前感谢
发布于 2010-10-04 15:49:30
这意味着你不能在运行时有效地选择或替换组件。
比方说,如果你想构建一个门户解决方案,让用户可以在屏幕上以任何他们想要的方式排列组件,Tapestry将不会提供一种有效的方法来做到这一点,因为组件具有静态结构,即您必须在编译时在其模板文件中定义组件中的内容。
或者,您可能为管理员提供了一个专门的菜单,因此您可能只想用一个派生组件AdminMenu替换Menu组件--但是您不能这样做,您必须在模板中使用if语句,或者使用一个块将不同的菜单注入您的布局组件中。
有一个与此限制相关的反模式:上帝或über组件试图通过有效地拥有一个包含所有可用组件的巨大模板文件来解决此问题,如下所示:
<t:if t:test="displayComponentA">
<span t:type="ComponentA" ... />
</t:if>
<t:if t:test="displayComponentB">
<span t:type="ComponentB" ... />
</t:if>
...然而,这是非常无效的,因为Tapestry组装了整个组件树,包括没有显示的组件,以完成页面的呈现。
发布于 2010-10-04 15:18:51
Tapestry使用模板来定义静态内容。这些模板通常是具有占位符变量的html页面,这些占位符变量由框架动态地替换为一些代码。模板允许将未更改的内容与更改的内容进行分离。通常,结构比行为更不容易改变。即使您想动态更改组件的某些元素,您也将使用由动态填充数据的模板定义的某些组件。这个动态数据也可以插入一些其他组件,等等。
发布于 2011-01-11 01:08:12
静态结构并不意味着您不能输出动态内容,也不意味着您不能向组件添加组件。您不能在运行时将一个组件添加到另一个组件。您可以使用其他组件定义页面或组件结构,但这些都是在页面呈现之前在模板中定义的,而不是在页面呈现时定义的。组件可以选择不呈现自身,呈现其模板的一部分(如果和除非组件),等等。
由Tapestry的静态结构引起的少数实际情况之一是,组件C不能使用其内部相同组件的另一个实例。
https://stackoverflow.com/questions/3853065
复制相似问题