Чтобы добавить пользовательский vmethod к TT в Dancer , нужно немного возиться с прямыми переменными пакета TT. Мне бы очень хотелось, чтобы объект Dancer :: Template предоставил доступ к базовому объекту шаблона.
Вот фрагмент, который может пойти по маршруту Dancer:
package mydancerapp;
use Dancer qw(:syntax);
# make sure TT module is loaded since Dancer loads it later in the request cycle
use Template::Stash;
# create list op vmethod, sorry its pretty trivial
$Template::Stash::LIST_OPS->{ uc_first } = sub {
my $list = shift;
return [ map { ucfirst } @$list ];
);
Вероятно, лучше переместить это в свой собственный модуль mydancerapp::TT
или mydancerapp::TT::VMethods
, а затем загрузить его в свой основной класс приложения.
Затем вы можете использовать его в своих шаблонах, например:
# in route
get '/' => sub {
template 'index', { veggies => [ qw( radishes lettuce beans squash )] };
};
# in template: views/index.tt
<p>[% veggies.uc_first.join(',') %]</p>
Если все прошло хорошо, вы должны увидеть: Radishes,Lettuce,Beans,Squash
в своем выводе. :)