动态类型语言中的 Web 开发策略(3)Seaside 策略
- UID
- 1066743
|
动态类型语言中的 Web 开发策略(3)Seaside 策略
Seaside 策略Seaside 是一个不使用传统模板的 HTML 呈现策略的例子,是针对使用 Smalltalk 开发 Web 应用程序的框架。如今,Web 开发人员通过一个名为层叠样式表 (CSS)(参见 )的策略将样式放到了一个更加重要的位置。在 CSS 中,您可以使用模板友好的语言来构建包括呈现位置、颜色、背景以及字体在内的所有的样式信息。Seaside 在样式上非常依赖 CSS,但却从不用模板来呈现基本组件。
在 Seaside 中,每一个组件都能够自我呈现。最基本的情况是,一个组件仅仅显示基本的 HTML 标记和必要的动态内容以呈现此组件。例如,清单 9 定义了 renderContentOn 方法来创建一个简单 Seaside 计数器:
清单 9.一个简单的 Seaside 组件1
2
3
4
5
6
7
8
9
| renderContentOn: t1
t1 heading: count.
t1
anchorWithAction: [self increase]
text: '++'.
t1 space.
t1
anchorWithAction: [self decrease]
text: '--'
|
在清单 9 中,t1 heading: count. 使用实例变量 count 中的内容呈现了一个标题,该变量包含了一个简单计数器的值。然后,代码呈现了一个在 Seaside 术语中称作锚的链接,该链接包含了 '++' 文本并调用 increase 方法。最后,代码中针对 decrease 方法呈现了一个相似的链接。图 1 展示了含有一个在清单 9 中呈现的计数器的 Web 页面:
图 1. 一个简单的 Seaside 组件更加复杂的组件能够使其子组件自我呈现。用这种方法,Seaside 能够用最小的努力产生相当复杂的组件。例如,表能够呈现一系列行,而这些行又能够依次呈现一系列单元格。清单 10 是一个复杂组件的例子:
清单 10. 一个更加复杂的 Seaside 组件1
2
3
4
| renderContentOn: t1
counters
do: [:t2 | t1 render: t2]
separatedBy: [t1 horizontalRule]
|
清单 10 中的代码呈现了一组计数器,遍历一个容器集合,为每一个容器调用 render 方法,并用水平线将每个容器分隔。您可以在图 2 中看到结果:
图 2. 一组 Seaside 计数器Seaside 模型不使用模板,却可以依靠每个个体对象的自我呈现来构建异常强大的具有复杂交互功能的 Web 页面。Seaside 依靠样式表来维持设计人员与编程人员间的良好关系。分层、布局、回溯和样式在 Seaside 中是家常便饭。 |
|
|
|
|
|