0

次のようなネストされた構造体を作成しようとしています

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

このままでいいの?またはそうするより良い方法はありますか?

ありがとう

4

3 に答える 3

1

StructAppend()を使用して、セッション構造をセットアップできます。

<cfscript>
initStruct = {Data={Filtered={}}};
StructAppend(session[this.local],initStruct,false);
</cfscript>

ここでこれをテストする時間がまだないので、ymmv

于 2012-05-24T16:00:01.307 に答える
1

SetVariable 関数は、要件を満たすためにネストされた構造を作成します。

 <cfset SetVariable("test1.test2.test3",4)>

4 に等しい変数 test1["test2"]["Test3"] を作成します。

また、パス (文字列) に基づいて空の構造体を作成できる StructGet も調べてください。

于 2012-05-24T16:22:34.840 に答える
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>
于 2012-05-24T20:04:52.207 に答える