2013-03-05 23 views
5

GStringTemplateEngine için şablonlarda kullanılacak bir işlevi tanımlamak istiyorum.GStringTemplateEngine şablonunda işlev bağlama nasıl tanımlanır?

import groovy.text.GStringTemplateEngine 

def prettify = { 
return "***${it}***" 
} 
def var = "test" 

def f = new File('index.tpl') 
engine = new GStringTemplateEngine() 
tpl = engine.createTemplate(f).make([ 
    "var": var, 
    "prettify": prettify 
]) 
print tpl.toString() 

index.tpl: Bu bir istisna atar

Var: ${var} 
Prettified: <% print prettify(var) %> 

: Böyle bağlayıcı kullanmak çalıştı

Caught: groovy.lang.MissingMethodException: No signature of method: groovy.tmp.templates.GStringTemplateScript1.prettify() is applicable for argument types: (java.lang.String) values: [test] 
Possible solutions: notify(), printf(java.lang.String, [Ljava.lang.Object;), printf(java.lang.String, java.lang.Object), printf(java.lang.String, [Ljava.lang.Object;), identity(groovy.lang.Closure), printf(java.lang.String, java.lang.Object) 

Ama bu işe yaramıyor. Şablon motorunun, ciltlemelerde ciltlemeyi kapatmalarını sağlar. Nasıl yaparım? Ya da muhtemelen başka bir şablon motoru seçmeliyim?

+0

Bir index.tpl örneği verebilir misiniz? Kodunuz işe yarayacaktır, bu yüzden şablonda nasıl çalıştırdığınızı gösteren bir sorun olabilir. – Rhysyngsun

+0

Cevabınız için teşekkürler! Şablon kodunu ekledim. – Soid

cevap

6

içine index.tpl değiştirilmesi:

Var: ${var} 
Prettified: <% print prettify.call(var) %> 

Çıkacaksınız içinde:

***test***Var: test 
Prettified: 

sen içine index.tpl değiştirirseniz:

Var: ${var} 
Prettified: ${prettify.call(var)} 

çıkışı geçerli:

Var: test 
Prettified: ***test*** 
+0

Mükemmel çalışıyor, çok teşekkürler! – Soid

İlgili konular