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)>

これで目的の結果が生成されますが、ご覧のとおり、そのためだけに新しいクエリ オブジェクトを作成する必要があります。HTML ヘルパーのドキュメントを読んだselectところ、オブジェクトの配列を提供して入力することもできることがわかりました。
名前と値のペアを含む構造を提供するなど、選択リストを作成する他のオプションはありますか。

4

2 に答える 2

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()関数はドキュメントにも記載されていませんが、ソース コードには十分にコメントが付けられています。

オプションにクエリオブジェクトを使用したコードは次のとおりです(上記で入力した出力を取得するために変更nameColumnしました):column

<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 に答える