阻止 YES/NO 值转换为 true/false Coldfusion 9?

Prevent YES/NO values to convert to true/false Coldfusion 9?

我有一个表单,用户必须 select 列表中的值。列表由管理员创建。在其中一个列表中,有一个选项供用户选择 NO 代表某些保留代码的值。类似于 Not Occupied。所以我使用 JQuery 和 AJAX 与服务器通信。在后端,我在生产服务器上使用 ColdFusion 9。因此,为了恢复 NO,我必须使用 space 将其转换为 'NO '。如果我不执行此功能,客户端将 return 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>

我曾尝试在“是”和“否”两边加上引号,但这没有帮助。如果有人知道如何解决这个问题,请告诉我。提前致谢!

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

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

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

结构(哈希表)非常擅长快速查找键,但这里只有 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);