我正在开发一个Template::Toolkit
用作模板引擎的 Catalyst 应用程序。一页需要一个相等输入元素的列表。它们可以从数组中获取,但我需要元素的排序顺序和描述性标签。
为了有一个排序顺序,我会使用一个数组。对于每个键存储一个附加值,散列是完美的。如何在 TT中结合两者?我可以同时使用这两种东西,但这看起来很难看,并且在更改字段时可能会导致错误。
但是,我更喜欢在 TT 中这样做,因为表单元素的描述和顺序都是前端的事情。
这就是我在纯 Perl 中的做法:
#!/usr/bin/perl -w
use 5.10.0;
# definition of description and order in 1 step
my @fields = (
property_foo => "Some property",
property_bar => "Important field",
property_baz => "Something else",
);
# extract information
my %descriptions = @fields;
my @order = @fields[grep {($_ + 1) % 2} 0..(scalar @fields - 1)];
say "=== natural perl sort order ===";
foreach (keys %descriptions) {say $_};
say "=== wanted output ===";
foreach (@order) {
say $descriptions{$_} . ": [label for $_]";
}
输出:
=== natural perl sort order ===
property_baz
property_foo
property_bar
=== wanted output ===
Some property: [label for property_foo]
Important field: [label for property_bar]
Something else: [label for property_baz]
这是我在模板中写的:
[%
order = (
property_foo,
property_bar,
property_baz,
);
descriptions = {
property_foo => "Some property",
property_bar => "Important field",
property_baz => "Something else",
}
FOREACH property IN order %]
[% descriptions.$property %]: <input name="[% property %]" />
[% END %]
但是,两次拥有相同的信息(字段列表)确实很难看。我想避免两次编辑列表,并且使用更长的字段列表真的很烦人(大约 20 个项目,不足以做一些数据库的东西)。