所有七件事(http://seventhings.liftweb.net/)当然都不错,但我特别热衷于模板(http://seventhings.liftweb.net/templates)声称"Lift支持设计师友好模板".
作为我学习Lift的做法的一个步骤,我正在尝试创建一个简单的对象创建表单:获取一些参数,将它们用作构造函数参数,然后将对象存放起来.经过一些研究和实验,我有两个问题:
我的基础是:
表单示例/文档似乎都是关于特殊提升:标签.Exploring Lift 表示表单应如下所示:(http://exploring.liftweb.net/master/index-6.html)
<lift:Ledger.add form="POST">
<entry:description />
<entry:amount /><br />
<entry:submit />
</lift:Ledger.add>
Run Code Online (Sandbox Code Playgroud)
我不确定它甚至是有效的html5,虽然它可能是有效的xhtml,但它并不觉得这符合我们的设计师朋友让你的模板看起来像真正的HTML的精神.我在其他地方读了(再也找不到了)我们确实可以选择使用实际的输入标签,但是我们不会得到Lift的花哨形式的某些部分,或者某些,这段话不是很清楚关于我究竟错过了什么,这些例子似乎对我写一个简单的html表单并制作简单的html帖子感兴趣.
demo.liftweb.net示例(1)的代码表明您的模板应如下所示(2)
<lift:surround with="default" at="content">
<div class="lift:PersonScreen"></div>
</lift:surround>
Run Code Online (Sandbox Code Playgroud)
PersonScreen片段的代码也不完全是有启发性的(3).还有一些模板的其他示例,例如,在特定位置只有一个ul标签,只能在片段中生成一系列具有嵌套元素的复杂li.当然,你可以在Scala中使用xml并且它可以读取,但它仍然在各处分散你的标记.这似乎违反了"设计师友好模板"的精神.
我想要了解什么.
很长一段时间我在webapp开发中严格遵循两条规则:
Idiomatic Lift似乎完全放弃了第一条规则,完全错过了第二条规则的价值.这些规则对我很有帮助,我还没准备好跟随那些似乎违反这些规则的例子而不理解为什么它不会造成混乱.我想了解为什么在Lift中可以在Snippets中生成如此多的显示代码.我也想了解为什么模板中的标记很少反映输出.
我(我想)想要的是什么:
我希望我的所有标记都有很少的(如果有的话)异常存在于我的模板中.我希望我的代码段能够进行最小的模板修改,通常只替换"leaf"标签上的元素文本,并可能调整属性值.我想我已经为一个相当复杂的显示示例做了这个,我怀疑我可以使用相同的技术生成一个vanilla html表单然后自己处理params.如果我希望我的模板看起来像最终结果表单那么我需要做什么?
回应和任何其他想法,尤其是了解有关这些东西的Lift心态,将非常感激.
谢谢!
回应@ OXMO456.(感谢您的回复.)
我有,他们似乎只是证实了我的担忧:例如我们开始:
提升模板不包含可执行代码.它们是纯粹的,原始的,有效的HTML.
太棒了.然后呢:
后两种调用代码片段的机制不会产生有效的Html5模板.
然而每个人似乎都使用这两种机制中的第一种.还说,它说:
第三,设计人员不必担心学习编程任何东西以便设计HTML页面,因为程序执行是从HTML中抽象而不是嵌入HTML中.
但非常一致的是,我在OP中引用的示例片段完全以编程方式生成标记.这似乎与设计友好模板的目标(a)背道而驰,因此设计人员不必担心Freemarker标记和(b)将显示逻辑与业务逻辑分离.
第二个链接很有帮助,也很有启发性,但很明显这不是The Lift Way.然而,The Lift Way似乎也将标记生成的整个负载拖入片段,这是(我认为)标记和业务逻辑的巨大复合.是电梯之路吗?