我正在尝试创建类似
的嵌套Structs<cffunction name="setDataAllWithFilter" output="false" access="public">
<cfargument name="stCollection" required="true" type="Struct" />
<cfif NOT StructKeyExists( Session, this.LOCAL ) >
<cfset Session[this.LOCAL] = StructNew() />
</cfif>
<cfif NOT StructKeyExists( Session[this.LOCAL], "Data" ) >
<cfset Session[this.LOCAL]["Data"] = StructNew() />
</cfif>
<cfif NOT StructKeyExists( Session[this.LOCAL]["Data"], "Filtered" ) >
<cfset Session[this.LOCAL]["Data"]["Filtered"] = StructNew() />
</cfif>
<cfreturn SetAll( Arguments.stCollection, Session[this.LOCAL]["Data"]["Filtered"] ) />
</cffunction>
这样好吗?还是有更好的方法呢?
由于
答案 0 :(得分:1)
您可以使用StructAppend()来设置会话结构:
<cfscript>
initStruct = {Data={Filtered={}}};
StructAppend(session[this.local],initStruct,false);
</cfscript>
我没有时间在这里测试,所以ymmv
答案 1 :(得分:1)
SetVariable函数将创建嵌套结构以满足要求。
<cfset SetVariable("test1.test2.test3",4)>
将创建一个变量test1 [“test2”] [“Test3”],等于4。
另请参阅StructGet,它允许您根据路径(字符串)创建空结构。
答案 2 :(得分:0)
你做得很好。你可以使用cfparam让你的生活更轻松
<cffunction name="setDataAllWithFilter" output="false" access="public">
<cfargument name="stCollection" required="true" type="Struct" />
<cfparam name="session[this.local]" default="#structNew()#">
<cfparam name="session[this.local].Data" default="#structNew()#">
<cfparam name="session[this.local].Data.Filtered" default="#structNew()#">
<cfreturn SetAll( Arguments.stCollection, Session[this.LOCAL]["Data"]["Filtered"] ) />
</cffunction>