如何在变量中使用ColdFusion标记并对其进行评估?

时间:2011-09-30 13:38:54

标签: coldfusion

我得到一个可以包含CF自定义标签的变量。 E.g。

<cfset a = '<model:sparkline id="1"/>'/>

我希望将其评估为HTML并输出。不确定如何/如果我能做到这一点。

3 个答案:

答案 0 :(得分:2)

您可以修改自定义标签吗?如果是这样,您可以使用caller范围在调用页面中设置变量。因此,在自定义标记内,您可以执行<cfset caller.a = "whatever" />,这将在调用页面的variables范围内设置值。

如果您不想修改自定义标记,则可以使用<cfsavecontent>将输出保存到变量中。例如:

<cfsavecontent variable="a">
    <model:sparkline id="1" />
</cfsavecontent>

答案 1 :(得分:1)

Sean Coyne的回答是正确的,只要导入包含在与cfsavecontent标记相同的上下文中:

<cfimport taglib="./tags" prefix="model">

<cfsavecontent variable="a">
    <model:sparkline id="1" />
</cfsavecontent>

<cfoutput>#a#</cfoutput>

将导致sparkline customtag的动态评估输出。

答案 2 :(得分:1)

输出代码并让它执行是不可能的。 OUTPUT只是意味着输出。这并不意味着“跑”。

让CF执行CF代码的唯一方法是遵循正常渠道: *申请模板; *包括模板; *将模板称为自定义标签或CFMODULE; *在CFC中调用方法; *其他人?不管怎样,你明白了。

因此,如果您拥有动态创建并希望执行的代码,则需要将其写入文件,然后通过最合适的机制调用它。但是请注意:像这样运行动态代码会产生相当大的开销,因为代码需要在运行之前进行编译,而编译并不是方案中最快的过程。这里做的“最好的”是尝试在需要之前编写和编译文件,并且只重写它需要更新的文件。不要在每次请求时重新执行此操作。但是,理想情况下,根本不要做这种事情。人们通常可以用不同的方式处理事情。