2012-06-16 11 views
6

私はムースを使用してperlのクラスで怠惰な属性を宣言し、属性がビルダーを使用している場合:Template ToolkitとLazy Moose属性 - それらを動作させる方法は?

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

[テンプレートに::私はこの属性を使用しようとするでしょうToolkitのテンプレート:

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

を私は何も得ません。 TTで属性を処理する前にperlスクリプトでこのattrを手動で呼び出す必要があります。 TTがこのattrを単独で初期化できる方法はありますか?

答えて

13

私はこのようなMooseオブジェクトを渡していると仮定しています。

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

2番目のパラメータはハッシュリファレンスであり、祝福されたオブジェクト(ムースまたは無し)ではありません。

したがって、Mooseオブジェクトはプレーンハッシュとして扱われ、テンプレートツールキット外のアクセサを呼び出すことによって入力されるまで 'colors'キーはありません。

あなたはこのような何かをする必要があります:あなたのテンプレートで

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

そして:あなたはそれが期待通りに動作するはずです

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

+1

OPの実際のエラーの良い推測!私はあなたがこれまでにこれで噛まれたと確信しています:) – ikegami

+0

@ikegamiいいえ、私は最近Template Toolkitを使って仕事をしています。 – Dre

+1

はい、実際のスキームはもう少し複雑でしたが、一般的にあなたの方法は私のために働いた、ありがとう! – Sly

関連する問題