1

我目前正在尝试创建一个<select>下拉列表,它将<option>根据URL变量(或默认值)选择哪个。但是,我不希望我的选项列表看起来像;

name_az, name_za, 最新, 最旧

因为这不是很用户友好,但我也不想在我的代码中使用这些;

名称 AZ(默认)、名称 ZA、最新频段、最旧频段

因为显然这让我自己做更多的工作。

我可以手动创建每个选项列表并<cfif>检查每组选项以选择所需的选项。然而,正如任何设计师都知道的那样,当您可以创建一个循环列表并简单地将两个值添加到该列表中时,这会产生很多额外的、不需要的工作。

以下是我目前拥有的代码;

<select>
    <cfset sortlist = "name_az|Name A-Z (Default),name_za|Name Z-A,newest|Newest Bands,oldest|Oldest Bands">
    <cfoutput>
        <cfloop list="#sortlist#" delimiters="," index="sortpair">
            <cfloop list="#sortpair#" delimiters="|" index="sortphrase">
                <option value="#sortphrase#">#sortphrase#</option>
            </cfloop>
        </cfloop>
    </cfoutput>
</select>

我希望它返回这个:

<select>
    <option value="name_az">Name A-Z (Default)</option>
    <option value="name_za">Name Z-A</option>
    <option value="newest">Newest Bands</option>
    <option value="oldest">Oldest Bands</option>
</select>

但是,显然我要求它返回sortphrase列出的任何位置,因此它将返回如下:

<select>
    <option value="name_az">name_az</option>
    <option value="Name A-Z (Default)">Name A-Z (Default)</option>
    <option value="name_za">name_za</option>
    <option value="Name Z-A">Name Z-A</option>
    etc..
</select>

有没有办法创建一个<cfloop>我可以循环x列表中的值的地方?

4

1 回答 1

5

您使用嵌套循环的想法对我来说似乎是错误的。把它当成是可以的 | 分隔列表,但为什么要循环呢?你最终会得到两倍于你需要的选项标签。尝试

<cfloop list="#sortlist#" delimiters="," index="sortpair">
    <option value="#listFirst(sortpair, '|')#">#listLast(sortpair, '|')#</option>
</cfloop>

此外,通常数组比 Coldfusion 中的列表执行得更快。对于像这样的小东西,这并不重要,但我通常会使用数组而不是列表,至少对于循环而言(但可能仍然使用 |-delimited 列表作为两个单独的部分)。

或者,您可以为每个键值对使用一个结构。例如,这是使用关联数组表示法的另一种方法:

<cfset sortarray = [
    {name = "name_az", value = "Name A-Z (Default)"},
    {name = "name_za", value = "Name Z-A"},
    {name = "newest", value = "Newest Bands"},
    {name = "oldest", value = "Oldest Bands"}
]>

<cfloop array="#sortarray#" index="sortstruct">
    <option value="#sortstruct['name']#">#sortstruct['value']#</option>
</cfloop>

或使用结构符号:

<cfloop array="#sortarray#" index="sortstruct">
    <option value="#sortstruct.name#">#sortstruct.value#</option>
</cfloop>
于 2013-03-21T12:29:20.467 回答