在我的示例中,我有一组分层依赖的下拉菜单(Coldbox 3.5+,CF9)
使用 bindCFC 和 cfajax ,这是前两个下拉列表的示例,第二个是依赖的
我的观点片段
<cfform>
<cfselect name="groups" id="groups" bind="cfc:#getSetting('AppMapping')#.model.dynform.getGroups()"
bindOnLoad="Yes"
display="group_name"
value="group_id" />
<cfselect name="events" id="events" selected="#form.event_id#"
bind="cfc:#getSetting('AppMapping')#.model.dynform.getEventsByGroup({groups})"
display="event_name"
value="event_id"
queryPosition="below">
</cfform>
我的模型(dynform)片段
<cffunction name="getGroups" access="remote" output="false" returntype="query">
<cfset var qGroups = "">
<cfquery datasource="#application.DSN#" name="qGroups">
SELECT
egc.nd_event_group_id group_id,
egc.short_desc group_name
FROM event_group_code egc
WHERE egc.status_code = 'A'
ORDER BY egc.sort_order
</cfquery>
<cfreturn qGroups>
</cffunction>
<cffunction name="getEventsByGroup" access="remote" output="false" returntype="query">
<cfargument name="event_group_id" type="string" required="true">
<cfset var qEventsByGroup = "">
<cfquery datasource="#application.DSN#" name="qEventsByGroup">
SELECT ec.event_id,
ec.FULL_DESC as event_name
FROM events ec
WHERE ec.event_group_id = <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.event_group_id#">
</cfquery>
<cfreturn qEventsByGroup>
</cffunction>
尽管上述方法可行,但我最终放弃了 jQuery/ajax 返回 JSON 方法。原因如下:
冷箱方式 = 处理程序应该做的工作,而不是视图
CFajax/cfselect 比 jQuery ajax 慢,而且选项更少。(如果我想要一个多选框怎么办?或者返回三个数据属性而不是两个?)
我不想在我的视图中使用 cfform 标签,这是 cfselect 需要的
如果需要,我可以发布 jQuery ajax 方式,但我想我回答了原始问题