0

リクエストの情報を保存するために配列を使用しています。要求のある時点で、情報を追加または削除できます。

削除ボタンは、ArrayDeleteAt() のロジックが見つかったページにインデックスを渡します。

ページには、次のコードがあります。

<cfif (isDefined('form.deleteIndex'))>
<cfset temp = arrayDeleteAt(session.Request,form.deleteIndex)>
</cfif>

最初の項目を削除すると、構造体は配列から削除されませんが、その値はクリアされます。他のアイテムを削除しても問題ありませんが、配列から空のストライクを取得できません。

配列を作成:

<CFSET VarArrayLen = ArrayLen(session.ord)>
<CFSET VARDuplicatedItem = "False">
<cfloop index="i" from="1" to="#VarArrayLen#">
    <CFIF session.ord[i].ITEMID eq ITEMID >
        <CFSET VARDuplicatedItem = "TRUE">
    </CFIF>
</CFLOOP>
<CFIF VARDUPLICATEItem eq "False">
    <cfset temp = arrayAppend(session.ord,StructNew())>
    <cfset session.ord[arraylen(session.ord)].ITEMID = ITEMID>
    <cfset session.ord[arraylen(session.ord)].ITEMDETAILS = ITEMDETAILS>
    <cfset session.ord[arraylen(session.ord)].FullRequestDetails = FullRequestDetails>
</CFIF> 

ユーザーが配列から追加または削除できる 1 つのページ:

<CFSET VarArrayLen = ArrayLen(session.ord)>
<table>
    <cfloop index="i" from="1" to="#VarArrayLen#">
        <CFIF ArrayIsDefined(session.ord,i) eq true>
            <tr>
                <cfform action="ActionPage.cfm" method="post">
                    <td>
                        <input type="hidden" value="#i#" name="del" />
                        <input type="image" src="/images/stop.gif" width="8" alt="delete this item" />
                    </td>
                </cfform>
            </tr>
        </CFIF>
    </CFLOOP>
</table>

アイテムを削除するページ:

<cfif (isDefined('form.del'))>
    <cfset temp = arrayDeleteAt(session.ord,form.del)>
</cfif>

それがすべてのコードです。

セッションでは、すべての値が空の配列内の 1 つの項目が引き続き表示されます。

配列に残るのは常に最初に削除されるアイテムであり、残りは正常に削除されます。

4

1 に答える 1

0

問題を自己完結型のテスト ケースに抽出しようとしましたが、CF10 を使用して問題を再現することはできません。

<cfset session.orders = [{item='blah',qty=1},{item='blah2',qty=2}]>

<cfdump var="#session.orders#" format="text"
        label="before arrayDeleteAt(session.orders, 1)">

<cfset arrayDeleteAt(session.orders,1)>

<cfdump var="#session.orders#" format="text"
        label="after arrayDeleteAt(session.orders, 1)">

出力:

before arrayDeleteAt(session.orders, 1) - array - Top 2 of 2 rows

1) [struct]
    ITEM: blah
    QTY: 1 
2) [struct]
    ITEM: blah2
    QTY: 2 
after arrayDeleteAt(session.orders, 1) - array - Top 1 of 1 rows

1) [struct]
    ITEM: blah2
    QTY: 2
于 2013-07-17T18:53:06.177 に答える