2012-06-16 5 views
6

나는 무스를 사용하여 펄 클래스의 게으른 속성을 선언하는 경우, 그리고 속성은 빌더 사용 :Template Toolkit 및 Lazy Moose 속성 - 어떻게 동작하게 할 수 있습니까?

[% FOREACH color IN colors %] 
... 
[% END %] 

:이 속성을 사용하려고합니다 템플릿 :: 툴킷 템플릿에 다음

has 'colors' => (
    is => 'rw', 
    isa => 'ArrayRef', 
    lazy => 1, 
    builder => '_build_colors', 
); 

을 나는 아무것도 얻지 않을 것이다. TT로 속성을 처리하기 전에 perl 스크립트에서이 attr을 수동으로 호출해야합니다. TT가 직접이 attr을 초기화 할 수있는 방법이 있습니까?

답변

13

이렇게 무스 오브젝트를 전달한다고 가정합니다.

$template->process('some.tt', $moose_object, ...); 

두 번째 매개 변수는 축복받은 개체 (무스 또는 아닌)가 아닌 hashref로 간주됩니다.

따라서 무스 객체는 일반 해시로 처리되고 템플릿 도구 키트 외부에서 접근자를 호출하여 채울 때까지 '색상'키가 없습니다.

당신은 같은 것을 할 필요가 : 템플릿에

$template->process('some.tt', { obj => $moose_object }, ...); 

: 그리고 당신이 그것을가 예상대로 작동합니다

[% FOREACH color IN obj.colors %] 
... 
[% END %] 

.

+1

OP의 실제 오류에 대한 좋은 추측을하십시오! 나는 당신이 이것에 전에 물린 것 같아요 :) – ikegami

+0

@ ikegami 아니,하지만 나는 최근에 Template Toolkit으로 일하는 너무 많은 시간을 보냈고 은닉이 어떻게 작동하는지 연구 할 필요가있었습니다. – Dre

+1

네, 실제 계획은 좀 더 복잡했습니다. 그러나 일반적으로 당신의 방식은 저에게 잘 맞았습니다. 감사합니다! – Sly