这是我发现的,因为我已经将我的实践从 CGI.pm 转移到 TT,以及我在使用 HTML::Mason、HTML::Template、Text::Template 和使用的过程中学到的东西Rails 中的 ERB 和 HAML。
- 显示中包含的逻辑越多,特别是如果它是用特定于显示的语言编写的,那么您将获得的乐趣就越少。
- 我开始更喜欢 HAML 以减少模板内容的大小 [在 HAML 中,缩进暗示结束标签]
- 在进入模板之前,使用应用程序的本地语言执行尽可能多的逻辑来计算页面的各种动态位。[调用视图方法,在进行渲染之前]。
- 关于(3),通过使用方法,而不是内联显示/渲染逻辑,您可以使您的模板具有声明性,因此虽然您可能在渲染中间执行逻辑,但您的模板没有一堆 IF /THEN/ELSE 逻辑导致混乱。
让我们想象一个由页眉、页脚和正文组成的相当小的、人为的网页。让我们假设页脚是完全静态的,每次加载新页面时正文都会更改,但页眉仅在用户登录/注销时才会更改。
您可以想象包含如下代码的标头:
<header>
[% IF $user.is_logged_in THEN %]
Hello [% $user.name %] - <a href="/logout/user/[% $user.id %]">Log Out</a>
[% ELSE %]
Please <a href="/user/login">Log In</a>
[% END %]
</header>
但从长远来看,您最好在 header.tt 中执行此操作:
<header>
[% user_info($user) |html %]
</header>
这在 View::Helpers::Header.pm 中:
sub user_info {
my $user = shift;
if ($user->{is_logged_in} ) {
return "Hello $user->{name} - " . logout_link($user->{id});
}
else {
return "Please " . login_link();
}
}
sub logout_link {
my $userid = shift;
return qq(<a href="/logout/user/[% $userid %]">Log Out</a>)
}
当然,您可以在 TT 而不是纯 Perl 中实现视图助手,我没有任何类型的数字给您,但是如果您已经在 Perl 中完成了所有逻辑,您可以将 Perl 重构为模块(如果它不存在的话),而不是在 TT 中重新编码它们。