当我使用Text :: Xslate模板引擎并收集将在Perl脚本中提供给模板的数据时,一切正常并且符合预期:
my %vars = (
some => {
nested => {
thing => 'foobar',
},
},
);
# template.tx contains [% some.nested.thing %]
my $content = $tx->render('template.tx', \%vars);
正如预期的那样,[% some.nested.thing %]
被“foobar”取代。
如果我以这种方式在模板中分配:
[% some_nested_thing = 'foobar' %]
一切都很好。 但是,当我尝试分配这种方式时:
[% some.nested.thing = 'foobar' %]
它失败并显示以下消息:Text::Xslate::Compiler: Cannot modify ., which is not a lexical variable
。
那么,甚至可以在Text :: Xslate中分配内部模板吗?
值得注意的是,仍然可以在Text :: Xslate模板中创建多维哈希:
[% some = {
nested => {
thing => 'foobar',
}
} %]
然后可以引用其中的元素,如[% some.nested.thing %]
。
答案 0 :(得分:2)
The manual只讨论制作和分配新变量,而不是现有变量。它甚至不鼓励使用该功能。
SET和赋值,虽然强烈使用它们 气馁。
[% SET var1 = expr1, var2 = expr2 %] [% var = expr %]
答案 1 :(得分:2)
不,这样的可能性不大,如果您阅读the MVC paper手册链接给您,我们就会明白为什么这是一个明确的设计目标。将数据从视图传递回控制器应该是一个很大的禁忌。您可以通过定义一个自定义函数来解决这个问题,您可以使用该函数从模板中回调Perl,但如果您真的想要这样的hack,请三思而后行。