在过去几年使用 Seaside 后,我发现模板系统的代码味道很糟糕。是否有一个 .net 框架使用类似于 Seaside 画布系统的东西来生成 html、css 和 javascript?或者是一种避免我在模板中发现重复的方法。
[编辑]
NHaml 与我正在寻找的东西并不接近。重点不是拥有 (X)HTML 的简写,而是拥有一种可以重构和重用代码的编程语言。
在 Seaside 中,它可能看起来像这样:(画布是 html [和 javascript] 的构建者)
renderContentOn: canvas
canvas form
class: 'eventEditor';
with:[
self renderWhoOn: canvas;
renderButtonsOn: canvas]
在这个方法中,我调用了两个子例程
renderWhoOn: canvas
self decorateDivAndLabel: 'Who' on: canvas around: [
canvas select
id: tagId;
selected: model who;
list: model whoList;
callback: [:value | model who: value]]
第一个调用围绕选择表单元素的装饰器:
decorateDivAndLabel: aString on: canvas around: aBlock
canvas div: [
canvas label
for: (tagId := canvas nextId);
with: aString,':'.
aBlock value]
这可以消除几乎所有的重复。
我对模板系统有类似的感觉(参见ASP.MVC:实现非模板化视图引擎?),经过一番尝试后,我采取了以下方法:
- 实现了一个流畅的 HTML 生成器 C# 类,它不直接写入流,而是将整个 HTML 页面构造为内存中对象层次结构。
- 更高级别(可重用)的 HTML 代码片段(如复杂的输入控件等)被实现为单独的类,并作为节点插入到此层次结构中,并且可以自动扩展为纯 HTML 节点。
- MVC 视图是 POCO C# 类,它构造 HTML 层次结构并将其写入响应流。
一些好处(从我的角度来看):
- 您仍然保留对 HTML 的控制
- 可重用性、继承性、封装性……
- 结果是自动格式化(缩进、HTML 等)
- 最重要的是...无需使用单独的 DSL 进行模板脚本编写。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)