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