我的应用程序需要使用自定义查询中的选项填充html选项。我试图将逻辑放入一个通用的自定义标签中,以便我的视图更清晰,更具可读性。我是cfml的新手。
这是我的代码:
<!--- ```````````````````````````````````````````````````````````````````````````` --->
<!--- This tag will populate any SELECT with the OPTIONs pulled from the database. --->
<!--- The attributes of this tag are --->
<!--- data_source: The datasource for the query --->
<!--- table_source: The table used for the query --->
<!--- option_value_source: The DB cell to use for the value of the option. --->
<!--- option_inner_source: The DB cell to use for the value of the inner text. --->
<!--- ____________________________________________________________________________ --->
<cfquery name="option_query" datasource="#Attributes.data_source#">
SELECT * FROM #Attributes.table_source#
</cfquery>
<cfoutput query="option_query">
<option value="#Attributes.option_value_source#"> <!--- The cell to be used for the value of the option --->
#Attributes.option_inner_source# <!--- The cell to be used for the inner text of the option --->
</option>
</cfoutput>
我打电话给:
<label>
Class Name
<select name="className" id="className">
<cf_getOptions data_source="codify" table_source="classes" option_value_source="classes.id" option_inner_source="classes.name">
</select>
</label>
结果是我得到一个SELECT填充了每个结果的单词class.name。
执行此操作的最佳cfml方法是什么(我假设人们通常不会为此使用自定义标记)?是否可以重写此代码以获得正确的结果?
答案 0 :(得分:1)
你很接近(对你来说使用自定义标签很好,顺便说一下。)
您需要告诉CF您想要查询中的列值,而不仅仅是传入属性的值。所以就是这样:
<cfoutput query="option_query">
<option value="#option_query[Attributes.option_value_source][currentRow]#">
#option_query[Attributes.option_inner_source][currentRow]#
</option>
</cfoutput>
人们只能按照原来的方式直接引用列名,但是这里需要一个间接引用,这意味着代码变得有点麻烦。