2012-06-16 27 views
6

Ben Moose kullanarak perl sınıfında tembel niteliği bildirirseniz, ve nitelik oluşturucu kullanıyor:Şablon Araç seti ve tembel Moose öznitelikleri - nasıl davranır?

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

: Bu özellik kullanmak çalışacağım Şablon :: Toolkit şablonunda sonra

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

Hiçbir şey alamayacağım. Özniteliği TT ile işlemeden önce perl betiğindeki bu elkitabını manüel olarak çağırmalıyım. TT bu çekimi kendi başına başlatabilir mi?

cevap

13

Moose nesnesini böyle geçtiğinizi farz ediyorum.

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

ikinci parametrenin bir hashref, Mübarek nesne (geyik ya da olmayan) herhangi bir tür olarak kabul edilir.

Yani, Moose nesne düz karma olarak ele alınır ve Şablon Toolkit dışında erişimciyi arayarak doldurmak kadar 'renk' anahtarı yoktur.

Böyle bir şey yapmanız gerekir: Şablonunuzdaki

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

Ve sonra: Eğer beklediğiniz gibi çalışması gerektiğini

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

.

+1

OP'nin gerçek hatasını iyi tahmin edin! Bahse girerim bu konuda daha önce ısırıldınız :) – ikegami

+0

@ikegami Nope, ama son zamanlarda Template Toolkit ile çalışmak ve stantın nasıl çalıştığını incelemek için çok fazla zaman harcadım. – Dre

+1

Evet, gerçek şema biraz daha karmaşıktı, ama genelde senin için benim için çalıştı, teşekkürler! – Sly

İlgili konular