6

Mooseを使用してperlクラスでlazy属性を宣言し、その属性がビルダーを使用している場合:

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

次に、Template::Toolkitテンプレートでこの属性を使用してみます。

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

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

4

1 に答える 1

13

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

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

2番目のパラメーターは、hashrefであると見なされ、祝福されたオブジェクト(Mooseかどうか)ではありません。

そのため、Mooseオブジェクトはプレーンハッシュとして扱われ、Template Toolkitの外部でアクセサを呼び出してデータを入力するまで、「colors」キーはありません。

あなたはこのようなことをする必要があります:

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

そして、テンプレートで:

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

期待どおりに機能するはずです。

于 2012-06-16T23:08:51.477 に答える