防止YES / NO值转换为真/假Coldfusion 9?

时间:2017-10-26 14:48:03

标签: coldfusion coldfusion-9 cfml

我有一个表单,用户必须从列表中选择值。列表由管理员创建。在其中一个列表中,有一个选项供用户选择代表某些保留代码的NO值。像Not Occupied这样的东西。所以我使用JQuery和AJAX与服务器进行通信。在后端我在生产服务器上使用ColdFusion 9。所以为了带回NO我必须用空格将其转换为'NO '。如果我不这样做,则会在客户端返回false值。以下是我的代码转换示例:

<cfset convertYesNo = {
    YES : "YES ",
    NO : "NO "
}>

<cfset qryRecs['value'] = URLEncodedFormat(structKeyExists(convertYesNo, myInfo[CurrentRow]) ? convertYesNo[myInfo[CurrentRow]] : myInfo[CurrentRow])>

以上代码在我的开发网站上运行良好。唯一的区别是在开发时我们有ColdFusion 10,在现场我们有ColdFusion 9.所以一旦我将代码移动到实时,我开始收到错误信息:

ColdFusion was looking at the following text&#x3a;<p>&#x7b;</p><p>The CFML compiler was processing&#x3a;<ul><li>A cfset tag beginning on line 1071, column 18.<li>A cfset tag beginning on line 1071, column 18.

<pre>1069 :         }&gt;
1070 :      
<b>1071 :       &lt;cfset convertYesNo = {</b>
1072 :          &quot;Yes&quot; : &quot;Yes &quot;,
1073 :          &quot;No&quot; : &quot;No &quot;
</pre>

我试图在YES和NO附近加上引号,但这没有帮助。如果有人知道如何解决这个问题,请告诉我。提前致谢!

2 个答案:

答案 0 :(得分:6)

我认为CF9的结构符号不支持这种语法。请尝试以下操作(=而不是:分隔键值对。

<cfset convertYesNo = {
    YES = "YES ",
    NO = "NO "
}>

答案 1 :(得分:0)

  

<cfset qryRecs['value'] = URLEncodedFormat(structKeyExists(convertYesNo, myInfo[CurrentRow]) ? convertYesNo[myInfo[CurrentRow]] : myInfo[CurrentRow])>

Structs(HashTables)非常适合快速查找键,但是这里只有2个键,因此构造效率会更高(cfscript语法中的例子):

qryRecs['value'] = URLEncodedFormat(
    listFindNoCase("YES,NO", myInfo[CurrentRow]) ?
        uCase(myInfo[CurrentRow]) & " "
            :
        myInfo[CurrentRow]
);

虽然为了更好的可读性和代码维护,您应该考虑将其分解为多个语句:

value = myInfo[CurrentRow];
if (value == "YES" || value == "NO")          // use EQ operator in CFML syntax
    value = uCase(value) & " ";

qryRecs['value'] = URLEncodedFormat(value);