Perl 存储HTML中变量的插值
我正在用Perl编写一个web应用程序。它有一个包含联系信息的表单,目前的布局如下:Perl 存储HTML中变量的插值,perl,Perl,我正在用Perl编写一个web应用程序。它有一个包含联系信息的表单,目前的布局如下: $form_htm = <<EOF <input value="$in{firstname}" name="firstname"> <input value="$in{surname}" name="surname"> ...etc... EOF $form_htm=这里有一些不好的方法和一些好的方法来处理这个问题 坏方法 在代码中加入HTML。 现在用户体验用户可以自己管
$form_htm = <<EOF
<input value="$in{firstname}" name="firstname">
<input value="$in{surname}" name="surname">
...etc...
EOF
$form_htm=这里有一些不好的方法和一些好的方法来处理这个问题
坏方法
在代码中加入HTML。
现在用户体验用户可以自己管理HTML模板。他们仍然需要学习一种模板语言,但它至少是一种有很好文档记录的语言。有限的语言不鼓励在模板中放入太多的代码,在视图和其余代码之间创建一种防火墙
但是所有格式化模板的工作仍然必须在服务器端完成。用户体验用户仍然需要学习一种特殊的模板语言。这给我们带来了最好的方法
纯HTML、CSS和Javascript。
在这种模式下,HTML没有在服务器端处理模板并向其中插入变量,而是使用Javascript请求所需的数据,并根据需要显示。这有很大的好处
它将视图与代码的其余部分完全分离。这使得用户体验人员能够很好地控制应用程序的行为。他们决定每页需要什么数据。他们决定如何操纵和展示。开发人员可以专注于提供数据
另一个优点是使用Javascript。Javascript已经成为web设计师必须知道的实际编程语言。用户体验人员不需要学习特殊的模板语言,他们使用的HTML、CSS和Javascript与他们一直使用的相同
最后,这意味着大部分格式化工作在客户端完成,从而减少了服务器上的负载
主要缺点是这需要对现有系统进行重大的重新架构。现在,服务器代码不再生成HTML页面,而是生成Javascript,供Javascript通过操作
混合模板+Javascript
现有系统的一个很好的混合方法是使用模板,但不要使用特殊的模板语言,而是使用Javascript。简单的标量变量(如名称和数量)仍然可以作为模板变量提供,但更大的单位(如列表和哈希)将作为JSON注入模板
例如,此模板
var people = [% people %]
将提供people=encode\u json(\@people)
,它可能扩展到:
var people = ["Jack", "Jill", "Jane", "Joe"]
然后用户体验人员可以使用这个Javascriptpeople
array做任何他们想做的事情
不利的一面是,这仍然让开发人员对站点的工作方式有太多的控制,因为他们决定使用什么模板和提供什么数据,这仍然意味着模板必须在服务器端进行扩展
从好处看,它让用户体验人员能够以他们熟悉的方式操作数据,它在视图和代码的其余部分之间强制执行清晰的分隔,并且您可以将现有代码转换为一次使用这些类型的模板。您需要的是模板系统。是其中之一,但还有很多其他的。比如说,你没有告诉我们你在使用什么样的技术。这是一个带有CGI.pm的CGI应用程序,还是一个更现代的舞者应用程序?更现代的方法与模板引擎配合得很好。谢谢所有这些,@simbabque。我的应用程序使用CGI.pm和我几年前学会的一些getcgivars()子组件。可能应该只是使用其中一个,但还没有整理好。谢谢@choroba,是的,我在其他地方发布了这个问题,现在我在我的原始帖子中添加了一个更新来反映这一点。一个令人印象深刻的回复,Schwern!非常感谢。我的情况是,我是唯一一个在这个项目上工作的人,而且我真的不懂JavaScript。你会建议什么样的选择来快速、轻松地在我的表格中实现这一点?我没有使用Dancer或类似的工具。我有这样的建议:@Terry我建议你学习Javascript。它现在无处不在,将非常有用。它与Perl没有太大区别,基本的数据结构将是熟悉的。有。至于“我是唯一一个在这个项目上工作的人”,重要的是让其他人可以在这个项目上工作。否则,您将永远是唯一一个处理该项目的人。@Terry最快的方法是将您的内联HTML替换为。然后看一下用类似Dancer的东西替换路由代码(即“用户请求search.html,我该怎么做?”)。模板工具包能否处理这种复杂性:“$dis{}”散列包含“disabled”(如果字段被禁用),否则“@Terry是的,这是简单的变量扩展。您可能会反转数据结构,以便传入一个散列,如my$vars={firstname=>{class=>“foo”,value=>“bar”,is_disabled=>0}$tt->process('thing.html',$vars)代码>和模板类似于
。我特意从提供的数据中删除了HTML的所有痕迹。这就是为什么firstname.is_disabled
是布尔值而不是字符串“disabled”。
Dear [% name %],
It has come to our attention that your account is in
arrears to the sum of [% debt %].
Please settle your account before [% deadline %] or we
will be forced to revoke your Licence to Thrill.
The Management.
var people = [% people %]
var people = ["Jack", "Jill", "Jane", "Joe"]