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.
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:
And then in your template:
Which should work as you expect it to.