2

我想生成一个应该如下所示的选择列表 -

<select name="isActive">
   <option value="True">Yes</option>
   <option value="False">No</option>
</select>

为此,我select()在 ColdBox 中使用 HTML 助手。

#html.select(
                options=qActiveOptions,
                nameColumn="value", 
                name="isActive",
                label="Active:",
                required="required",
                title="Active",
             )#

其中 qActiveOption 是我使用以下代码创建的查询 -

<cfset qActiveOptions=queryNew('name,value', "VarChar,VarChar")>
<cfset queryAddRow(qActiveOptions,2)>
<cfset querySetCell(qActiveOptions,'name','yes',1)>
<cfset querySetCell(qActiveOptions,'value','True',1)>
<cfset querySetCell(qActiveOptions,'name','no',2)>
<cfset querySetCell(qActiveOptions,'value','False',2)>

这会产生所需的结果,但正如您所见,我必须为此创建一个新的查询对象。我阅读了selectHTML 助手的文档,发现我们还可以提供对象数组来填充它。
是否有任何其他选项来填充选择列表,例如通过提供具有名称和值对的结构。

4

2 回答 2

3

丹是对的,你可以传入一个结构数组。首先,我会指出,如果您对名称和值是同一个字符串感到满意,最简单的形式就是使用逗号分隔的列表:

#html.select(
    options="Yes,No"
)#

这就是使用对象字面量的结构数组的样子。

#html.select(
    options=[
        {name:'Yes', value: 'true'},
        {name:'No', value: 'false'}
    ], 
    name="isActive",
    label="Active:",
    required="required",
    title="Active"
)#

产生的 HTML 是:

<label for="isActive">
    Active:
</label>
<select name="isActive" required="required" title="Active" id="isActive">
    <option value="true">
        Yes
    </option>
    <option value="false">
        No
    </option>
</select>
于 2015-01-06T19:27:22.900 回答
3

HTMLHelper的文档缺少 的条目html.select(),但如果您直接查看源代码,您会看到该函数可以将查询对象、列表或对象数组作为options参数的值。

<cfargument 
   name="options"
   type="any"
   required="false" 
   default="" 
   hint="The value for the options, usually by calling our options() method"/>

文档中也缺少该options()函数,但对源代码进行了很好的注释。

所以这是您的代码,使用查询对象作为选项(我更改nameColumncolumn以获取您在上面输入的输出):

<cfset qActiveOptions=queryNew('name,value', "VarChar,VarChar")>
<cfset queryAddRow(qActiveOptions,2)>
<cfset querySetCell(qActiveOptions,'name','yes',1)>
<cfset querySetCell(qActiveOptions,'value','True',1)>
<cfset querySetCell(qActiveOptions,'name','no',2)>
<cfset querySetCell(qActiveOptions,'value','False',2)>

<cfoutput>
#html.select(
    name="isActive",
    options= qActiveOptions,
    column="value", // renders the option tag's value attribute
    label="Active:",
    required="required",
    title="Active"
)#
</cfoutput>

呈现的 HTML:

<label for="isActive">Active:</label>
<select name="isActive" required="required" id="isActive" title="Active">
    <option value="yes">yes</option>
    <option value="no">no</option>
</select>

现在有一个数据对象数组,html.options()用于处理选项渲染。我删除了该nameColumn属性,因为它默认为value键。

<cfset foo = [
    {"name"= "yes", "value"= "True"}
    , {"name"= "no", "value"= "False"}
] />

<cfoutput>
#html.select(
    name="isActive",
    options= html.options(foo),
    label="Active:",
    required="required",
    title="Active"
)#
</cfoutput>

这会产生相同的渲染 HTML:

<label for="isActive">Active:</label>
<select name="isActive" required="required" id="isActive" title="Active">
    <option value="True">yes</option>
    <option value="False">no</option>
</select>
于 2015-01-06T19:29:48.063 回答