2011-09-20 7 views

답변

2

Dancer에 TT에 custom vmethod를 추가하려면 직접 TT 덤비는의 비트가 필요 패키지 변수. Dancer::Template 개체가 기본 템플릿 개체에 대한 액세스를 제공하기를 바랍니다.

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 당신의 출력에

그런 다음 같은 템플릿에서 사용할 수 있습니다. :)

+0

나는 이런 식으로 뭔가를 시도하고 그래서 난이 질문을 게시 작동하지 않았다 .. 지금은 ^^ 작동 – bliof

1

은 내가 vmethod을 추가하는 방법에 대한 모르겠지만, 두 번째 것은 다음과 같이 할 수 있다고 생각 :

hook 'before_template' => sub { 
    my $tokens = shift; 
    $tokens->{myfunction} = sub { ... };   # OR ... 
    $tokens->{otherfunction} = \&other_func; 
}; 
0

Dancer2에서이 작업을 수행 할 수 있습니다

hook before => sub { 
    my ($app) = @_; 

    $app->template_engine->engine->context->define_vmethod('list' => 'uc_first' => sub { 
     my $list = shift; 
     return [ map { ucfirst } @$list ]; 
    }); 
};