将特定值传递给自定义标记

时间:2017-10-23 13:58:40

标签: coldfusion cfml custom-tags

我希望将特定值传递给各种自定义标记,例如:

<cfif someerror>
  <cfset mytag.bordercolor = "red">
</cfif>

<cf_input id="mytag">

这有可能吗?

2 个答案:

答案 0 :(得分:2)

根据文档,您有什么工作 EXCEPT 您忘记将变量名称括在主题标签#之间。试试这个:

<cf_input id="#mytag#">

关于如何将变量传递给自定义标记,需要记住一些重要事项。 从文档 - Passing variables to custom tags and UDFs

  

将变量传递给CFML标记和UDF

     

当您将变量作为属性传递给CFML自定义标记,或作为参数传递给用户定义的函数时,以下规则确定自定义标记或函数是否接收其自己的变量私有副本或仅获取引用调用页面的变量:

     
      
  • 简单变量和数组作为数据副本传递。如果您的参数是包含多个简单变量的表达式,则表达式求值的结果将复制到函数或标记中。
  •   
  • 结构,查询和cfobject对象作为对象的引用传递   如果标记或函数获取调用页面数据的副本,则对自定义标记或函数中变量的更改不会更改调用页面上变量的值。如果变量通过引用传递,则对自定义标记或函数中变量的更改也会更改调用页面中变量的值。
      要将变量传递给自定义标记,必须将变量名称括在数字符号中。要将变量传递给函数,请不要将变量名称括在数字符号中。
  •   

答案 1 :(得分:0)

我不确定我是否按照您的提问,因此我会删除一些可能相关的信息。

您键入的语法将起作用。

在input.cfm文件中,您将引用Attributes.id。其价值将是“mytag”。

我建议使用cfparam设置默认值。

 <cfparam name="Attributes.id" type="string" default="tag">

例如。

如果您想传入“mytag”结构而不是字符串“mytag”,那么您将使用以下sytax:

 <cf_input id="#mytag#">

这将允许您使用Attributes.mytag.bordercolor获取颜色。

在这种情况下,您的cfparam更像是:

 <cfparam name="Attributes.id" default="#StructNew()#">

如果您想传入字符串,但仍然从页面的变量范围获取颜色,那么它将是这样的:

 <cfif StructKeyExists(Caller,Attributes.id) AND StructKeyExists(Caller[Attributes.id],"bordercolor")>
   <cfset Variables.bordercolor = Caller[Attributes.id].bordercolor>
 </cfif>

这是因为调用页面的变量范围在自定义标记中可用作“调用者”范围。但是,我建议小心使用它,因为你打破了封装。如果你正在接触那些可能确定的特定传递的变量名,但从调用者范围获取非指定变量通常不是一个好主意。