在PHP中,可以有一个函数,它的主体从渲染模式切换到代码模式,如下所示:
<?php
function renderA(a){
if(a.label){
?><label></label><?php
} else {
?><span></span><?php
}
}
?>
这在T4也可能吗? 我的谷歌搜索引导我到这里:Is there any way to have functions in basic T4 templates?
但是这个函数定义似乎不允许这样做。
或者至少,它确实不明显......
我知道这个PHP代码不是漂亮的代码,但是当你必须在一个循环中多次调用renderA
来呈现某些内容时,它会很方便。我认为ASP.MVC-razor也有类似的东西(https://stackoverflow.com/a/6532107/2173353),所以我希望T4能够以某种方式支持它......
答案 0 :(得分:0)
行。 我在这里找到了答案: How to create a method that encapsulates the T4 template text section?
似乎<# #>
和<#+ #>
的特殊组合可以解决问题。
<#+
public void RenderA(MyClass a){
if(a.label != null){
#><label><#= a.text #></label><#+
} else {
#><span><#= a.text #></span><#+
}
}
#>
基本上,您像往常一样使用<#= #>
进行字符串插值,使用<#+ #>
继续使用函数体。
链接问题中还有另一种替代方法,它使用内联lambda声明(https://stackoverflow.com/a/23840134/2173353)。