有人可以帮我改进吗?一定有更好的方法。我正在做的是为 flex 构建一个本地 Web 服务以填充树形菜单。Flex 作为我正在调用 Web 服务的应用程序只是一些背景知识,但与问题无关。
为了为这棵树创建分层数据,我编写了以下代码。
<cffunction name="getFormsBinMenu" access="remote" returntype="string">
<cfquery name="getParents" datasource="db_intranet_data">
SELECT * FROM formsbin_categories WHERE parentid = 1 ORDER BY sortorder ASC
</cfquery>
<cfoutput>
<cfxml variable="formsBinMenu">
<?xml version='1.0' encoding='utf-8' ?>
<folder label="Forms Bin">
<cfloop query="getParents">
<folder label="#XMLFormat(getParents.catname)#">
<cfquery name="getSubParents" datasource="db_intranet_data">
SELECT * FROM formsbin_categories WHERE parentid = #catid# and testonly = 0 and visible = 1 ORDER BY sortorder ASC
</cfquery>
<cfloop query="getSubParents">
<folder label="#XMLFormat(getSubParents.catname)#">
<cfquery name="getNextSubParents" datasource="db_intranet_data">
SELECT * FROM formsbin_categories WHERE parentid = #catid# and testonly = 0 and visible = 1 ORDER BY sortorder ASC
</cfquery>
<cfloop query="getNextSubParents">
<folder label="#XMLFormat(getNextSubParents.catname)#"/>
</cfloop>
</folder>
</cfloop>
</folder>
</cfloop>
</folder>
</cfxml>
</cfoutput>
<cfset menu = #toString(formsBinMenu)#>
<cfreturn menu>
</cffunction>
正如你所看到的,我只是在循环不同的查询。虽然这适用于我的目的,但我如何对其进行编码以便没有太多的代码重复?
我考虑过检查结构的深度,然后在索引循环中运行它,但这似乎仍然太多开销。
任何建议都会很棒!