2014-09-03 19 views
1

我越来越困惑。使用时coldfusion 9 VAR问题<cfset>

我有一组变量...

<cfset cataloge_menu_1 = "menu item 1"> 
<cfset cataloge_menu_2 = "menu item 2"> 
<cfset cataloge_menu_3 = "menu item 3"> 

我有一个网址的ID,这样我想要做的是输出的URL ID上述变量的基础,所以我有以下。 ..

<cfset cathead = "cataloge_menu_"&url.typeID> 

和下面的输出...

<cfoutput>#cathead#</cfoutput> 

但是,而不是输出 “菜单项1” 或菜单项2" DEPE根据URL ID,输出“cataloge_menu_1”或“cataloge_menu_2”。

我需要输出的是“菜单项X”而不是“cataloge_menu_X”。

任何帮助将不胜感激。

+0

你能使用一个变量,它看起来像' '。然后'' – 2014-09-04 04:16:29

回答

1

您可以使用Evaluate()函数来完成它。这是如何工作的:

<cfset cataloge_menu_1 = "menu item 1"> 
<cfset cataloge_menu_2 = "menu item 2"> 
<cfset cataloge_menu_3 = "menu item 3"> 
<cfset url.typeID=2 /> 

<cfset cathead = Evaluate("cataloge_menu_"&url.typeID) /> 
<cfoutput>#cathead#</cfoutput> 
+0

优秀 - 这是一种享受。非常感谢 – elixireu 2014-09-03 11:56:30

+2

我会避免使用此评估。简单地用括号表示变量,就像Adam在答案中所做的那样。 – Snipe656 2014-09-03 13:51:42

+2

是的,请继续使用@Adam Solutions关联数组概念。当你有动态类型变量时最好使用它。 阅读此http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec09d55-7fdf.html – Sks 2014-09-03 19:38:40

8

这是什么做的:

<cfset cathead = "cataloge_menu_"&url.typeID> 

简直是制造含有"cataloge_menu_1"(ETC)的字符串。和这个:

<cfoutput>#cathead#</cfoutput> 

只是输出该字符串。

如果你想访问一个名为cataloge_menu_1的变量,那么你不能简单地输出一个包含该变量名的字符串,并期望CF猜测你的意思是“寻找一个具有该名称的变量而不仅仅是字符串的输出” 。你需要告诉它输出变量

未覆盖的变量是 - 默认情况下 - 放入变量范围。所以来去变量的作用域一个动态命名变量,可以使用关联数组表示法通过字符串引用变量包含它的名字:

<cfoutput>#variables[cathead]#</cfoutput> 

PS:这也许是语言的东西(即:代码不在英文),但是你的意思是catalogecatalogue(或者如果必须,我认为catalog)?

+0

嗨亚当,非常感谢您的详细解释,我已经尝试使用关联数组作为建议,但我得到以下错误...您试图解引用标量类java.lang.String类型的变量作为包含成员的结构。 – elixireu 2014-09-03 10:40:53

+0

也,对不起我的英文 - 是的,它应该是目录。:-) – elixireu 2014-09-03 10:41:36

+0

它也应该告诉你哪一行代码(以及相应的哪个变量)你误解了内容。这里的标准故障排除技术是将有问题的变量转储出来,并确认它们包含你认为它们包含的内容。 – 2014-09-03 10:43:47

1

为什么不试试这个:

<cfset cathead = VARIABLES["cataloge_menu_" & url.typeID]> 
<cfoutput>#cathead#</cfoutput> 

或者你可以只输出动态变量:

<cfoutput>#VARIABLES["cataloge_menu_" & url.typeID]#</cfoutput> 
+0

简单和干净.. – osekmedia 2014-09-05 01:13:38

+1

我更喜欢这个解决方案,因为我总是遵循方括号表示来引用动态在任何范围内都是变量,它是干净的,没有任何相关的开销,就像'Evaluate()'一样。 – Anurag 2015-05-05 09:06:49