If I declare lazy attribute in perl class using Moose, and the attribute is using builder:
has 'colors' => (
is => 'rw',
isa => 'ArrayRef',
lazy => 1,
builder => '_build_colors',
);
then in Template::Toolkit template I'll try to use this attribute:
[% FOREACH color IN colors %]
...
[% END %]
I'll get nothing. I have to call this attr manualy in perl script before processing the attribute with TT. Is there any way TT can initialize this attr by himself?
I am assuming you are passing the Moose object like this.
$template->process('some.tt', $moose_object, ... );
The second paramater is assumed to be a hashref, not any kind of blessed object ( Moose or not ).
So, the Moose object gets treated as a plain hash and does not have the 'colors' key until you populate it by calling the accessor outside Template Toolkit.
You need to do something like this:
$template->process('some.tt', { obj => $moose_object }, ... );
And then in your template:
[% FOREACH color IN obj.colors %]
...
[% END %]
Which should work as you expect it to.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With