繁体   English   中英

在T4模板中使用类似PHP的函数

[英]Using PHP-like functions in T4 templates

在PHP中,可能有一个函数,其主体从渲染模式切换到代码模式,如下所示:

<?php
 function renderA(a){
   if(a.label){
      ?><label></label><?php
   } else {
      ?><span></span><?php
   }
 }
?>

T4也有可能吗? 我的Google搜索将我引到了这里: 有没有办法在基本的T4模板中具有功能?

但是此函数定义似乎不允许这样做。

或者至少,它确实不明显...

我知道这个PHP代码不是漂亮的代码,但是当您必须在循环中多次调用renderA来渲染某些东西时,它很方便。 我认为ASP.MVC-razor也有类似的东西( https://stackoverflow.com/a/6532107/2173353 ),所以我希望T4也能以某种方式支持它。

好。 我在这里找到了答案: 如何创建一种封装T4模板文本部分的方法?

看来, <# #><#+ #>的特殊组合可以解决问题。

<#+
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 )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM