我正在学习tapestry 5 web框架,但我不明白它的原理1: “静态结构,动态行为”,它意味着什么?
如果我不向组件添加组件,我该如何创建动态页面?
谁能帮帮我? 提前致谢答案 0 :(得分:1)
这意味着您无法在运行时有效地选择或替换组件。
如果您想构建一个门户解决方案,用户可以按照自己的方式在屏幕上排列组件,Tapestry将无法提供有效的方法,因为组件具有静态结构,即您必须定义什么在编译时在他们的模板文件中进入他们。
或者您可能有一个专门的管理员菜单,因此您可能只想将Menu
组件替换为派生组件AdminMenu
- 但您不能,您必须使用{{ 1}}模板中的语句或使用块将不同的菜单注入到布局组件中。
有一个与此限制相关的反模式:上帝或超级组件尝试通过有效地拥有包含所有可用组件的巨型模板文件来解决此问题,如下所示:
if
然而,由于Tapestry组装整个组件树(包括未显示的组件)来执行页面呈现,因此这非常无效。
答案 1 :(得分:0)
Tapestry使用模板来定义静态内容。这些模板通常是带有占位符变量的html页面,框架会动态地用一些代码替换它们。模板允许隔离不会改变的东西。通常结构不太容易改变行为。即使您想要动态更改组件的某些元素,您也将使用一些组件,该组件本身由动态填充数据的模板定义。这个动态数据可以再插入一些其他组件等。
答案 2 :(得分:0)
静态结构并不意味着您无法输出动态内容,也无法将组件添加到组件中。您无法在运行时将组件添加到另一个组件。您可以使用其他组件定义页面或组件结构,但这些都是在呈现页面之前在模板中定义的,而不是在呈现页面时定义的。组件可以选择不渲染自身,渲染其模板的一部分(If和unless组件)等。
Tapestry的静态结构导致的少数实际情况之一是组件C不能在其中使用同一组件的另一个实例。