2

目標: ユーザーが AdvancedDataGrid から行をドラッグしてゴミ箱アイコンにドロップすることでレコードを削除できるようにし、[OK] ボタンと [キャンセル] ボタンを使用してポップアップ アラートを介してユーザーが削除を意図していることを確認します。

何が機能していますか:

  • 行をゴミ箱アイコンにドラッグ/ドロップします。
  • ユーザーが「OK」ボタンをクリックすると、レコードが削除されます。
  • ユーザーが「キャンセル」ボタンをクリックすると、操作はキャンセルされます。

問題: ユーザーが [キャンセル] ボタンをクリックしてポップアップ アラートが閉じた後、ADG 内の行をドラッグできません。ADG を並べ替えた後、列ヘッダーをクリックすると、ユーザーは行のドラッグを再開できることがわかりました。

コード: (元の投稿から変更)

<mx:Image source="{trashImage}" buttonMode="true" 
toolTip="drag a participant here to delete them from the project"
dragDrop="deleteParticipantDrop(event)" dragEnter="deleteParticipantEnter(event)" 
dragExit="deleteParticipantDragExit(event)" top="4" right="122" id="image2" />  

// trashImage Event Handlers:
private function deleteParticipantEnter(event:DragEvent):void
{
    var component:IUIComponent = IUIComponent(event.currentTarget);
    dragComponent = component;
    DragManager.acceptDragDrop(component);
    DragManager.showFeedback(DragManager.MOVE);
    deleteParticipantDragEvent = event;
}

private function deleteParticipantDrop(event:DragEvent):void
{
    var selectedKitNum:String = memberRpt.selectedItem.KitNum;
    var selectedName:String = memberRpt.selectedItem.ParticipantName;
    var component:IUIComponent = IUIComponent(event.currentTarget);
    dragComponent = component;
    DragManager.acceptDragDrop(component);
    isEditingParticipantInfo = false;
    isDeletingParticipant = true;
    deleteParticipantDropEvent = event;
    event.stopImmediatePropagation(); // Added as per mrm
    alert.confirm("Are you sure you want to delete this participant, Kit #" + memberRpt.selectedItem.KitNum + " ("  + 
        memberRpt.selectedItem.ParticipantName + ") from the project?  This cannot be reversed!!  An email will be " +
        "sent to notify this participant and you will receive a copy of it for your records.", confirmRemoveParticipant);
}

private function deleteParticipantDragExit(event:DragEvent):void
{
    var component:IUIComponent = IUIComponent(event.currentTarget);
    dragComponent = component;
    DragManager.acceptDragDrop(component);
    DragManager.showFeedback(DragManager.NONE);
}

private function confirmRemoveParticipant(event:CloseEvent):void
{
    if (event.detail == Alert.YES)
    {
        deleteReason = DeleteParticipantTitleWindow(PopUpManager.createPopUp( this, DeleteParticipantTitleWindow , true));
        dispatchEvent(deleteParticipantDropEvent); // Added as per mrm
        PopUpManager.centerPopUp(deleteReason);
        deleteReason.showCloseButton = true;
        deleteReason.title = "Reason for removal from project";
        deleteReason.addEventListener("close", cleanupRemoveParticipant);
        deleteReason["cancelButton"].addEventListener("click", cleanupRemoveParticipant);
        deleteReason["okButton"].addEventListener("click", finalizeDeleteParticipant);
        isDeletingParticipant = false; 
    }
    else
    {
        cleanupRemoveParticipant();
    }
}

private function cleanupRemoveParticipant(event:Event = null):void
{
    memberRpt.invalidateDisplayList();
    memberRpt.executeBindings();
    if (deleteReason != null)
    {
        PopUpManager.removePopUp(deleteReason);
        deleteReason = null;
    }
}

public function finalizeDeleteParticipant(event:Event):void
{
    if (deleteReason.reason.text != null)
    {
        selectedReportItem = memberRpt.selectedItem;
        selectedReportItemIndex = memberRpt.selectedIndex;
        memberReportData.removeItemAt(selectedReportItemIndex);
    }
    else
    {
        alert.info("You must provide a reason for removing a participant from your project!!");
    }

    cleanupRemoveParticipant();
}

すべての役立つ提案を前もって感謝します。

4

6 に答える 6

1

キャンセル イベントの後に ADG で validateNow() メソッドを実行してみましたか?

以下は、validateNow() メソッドに関する詳細情報です。

なぜvalidateNowについて知る必要があるのか​​...

私は本当にこれがあなたが探しているものだと思います! その場合はお知らせください...

于 2008-10-25T20:28:04.637 に答える
0

アイデアは次のとおりです: - アラート ウィンドウを作成する直前に、DragEvent を停止します。

event.stopImmediatePropagation();
  • ユーザーが [はい] ボタンをクリックした場合に再開できるように、イベントを保存します。
queuedEvent = DragEvent としてのイベント。
  • アラート ウィンドウを表示する
  • ユーザーが [はい] ボタンをクリックした場合、キューに入れられたイベントを再開します
dispatchEvent(queuedEvent);
于 2008-10-22T01:34:09.007 に答える
0

executeBindings および invalidateDisplayList メソッドを使用して、データグリッドのデータ バインディングを更新してもうまくいきませんでした。また、Web サービスを呼び出す前に確認アラートを表示することもできませんでした。実際、Web サービスの呼び出しはまったく不要であることがわかり、削除しました。したがって、コードは次のように流れます。

  1. ADG 行をゴミ箱アイコンにドラッグ アンド ドロップします。
  2. 確認アラートボックスを表示します。
  3. ユーザーが「キャンセル」ボタンをクリックした場合、ADG を再表示します。

しかし、同じ問題が続きます。コードセクションを最新のコードで更新します。

于 2008-10-21T23:05:06.980 に答える
0

DragManager.showFeedback(DragManager.NONE);

于 2009-01-20T13:23:41.663 に答える
0

ちょっと待ってください...ドロップ イベントとポップアップのキャンセル ボタンの間に、GetParticipantOrderInformation によって処理されるように見える非同期 Web サービス呼び出しがあることを発見しました。あれは正しいですか?

はいの場合、キャンセルする前により簡単なキャンセル ダイアログを提供してみましたか? イベントのレイヤーの組み合わせが問題を引き起こしているのではないかと思います。

于 2008-10-21T20:41:01.903 に答える
0

囲んでいるコントロールで executeBindings および/または invalidateDisplayList を使用して、データグリッドのデータ バインディングを更新してみてください。

正直なところ、これはバグのように聞こえます。これをflexcodersに投稿しましたか? アドビの人たちはそこにたむろしています(おそらくここにもいますが、間違いなくそこにあります)

于 2008-10-21T20:30:55.653 に答える