2

Extjs 4.1には、ドラッグアンドドロッププラグインが有効になっている2つのツリーがあります。ユーザーは、これらのツリー間をドラッグアンドドロップできます。この状況でこれらのツリーに関連する構成は、viewConfigのみです。

ツリー1:

viewConfig:{
            plugins: [
                new PmProjectManagement.viewEdit.AvailableCriteriaTreeViewDragDrop({
                    allowContainerDrop: true,
                    allowParentInsert: false,
                    expandDelay: 30000,
                    dropGroup: "secondGridDDGroup",
                    dragGroup: "firstGridDDGroup"
                })
            ]
        }

ツリー2:

viewConfig:{
            plugins: [
                new PmProjectManagement.viewEdit.ViewConfigTreeViewDragDrop({
                    allowContainerDrop: true,
                    allowParentInsert: false,
                    expandDelay: 30000,
                    dropGroup: "firstGridDDGroup",
                    dragGroup: "secondGridDDGroup"
                })
            ]
        }

今のところ、あるツリーから別のツリーにうまくドラッグアンドドロップできますが、私が本当に望んでいるのは、ツリー1からツリー2、ツリー2からツリー1、およびツリー2内でドラッグできることです。 ddGroupが他のツリーに設定されているため、ツリー2のドラッグアンドドロップ。また、ツリー1内をドラッグできないようにするには、ツリー1が必要です。誰かがこれについて行くことについての提案がありますか?私が考えることができる唯一の解決策は、isValidDropPoint関数でオーバーライドを使用し、ddGroup修飾子を削除することですが、これに対するより洗練されたアプローチが本当に必要です。

4

1 に答える 1

1

ddGroup両方の木で同じである必要があります。

ext 4.2nodedragoverでは、ドラッグ中にExt.tree.Viewに通知するイベントがあります。このイベントはから開催されExt.tree.ViewDropZone#isValidDropPointます。

したがって、ext 4.2では、このイベントを処理してドロップを許可するかどうかを決定する必要があります。イベントの発生により多くの情報が得られるため、ドラッグしているツリーとイベントの説明が使用されているツリーを確認できます。

dragDataパラメータには、ツリーを取得できる「view」プロパティが含まれています。たとえば、宛先ツリーをドロップしますdragData.view.panel

ext 4.1では、ビューの通知はありませんでした。senchaの人たちは、これを新しいバージョンで実装する必要があることを示すToDoマーカーを配置しました。そして、はいExt.tree.ViewDropZone、イベントの種類を拡張して、ドラッグオーバーについてビューに通知することができます(4.2に似ています)。また、プラグインを拡張して、拡張したExt.tree.plugin.TreeViewDragDropばかりのプラグインを挿入する必要がありますExt.tree.ViewDropZone。これはプラグインのメソッドをオーバーライドするだけonViewRenderであり、拡張されたドロップゾーンを使用します。

次に、新しいプラグインを使用します。Ext.tree.ViewDropZone別の方法は、アプリケーションのあらゆる場所に適用されるをオーバーライドするだけです。

私見では、ddグループを変更する必要はありません。必要なのはnodedragover、ある種の実装の4.2で処理することだけです。

于 2013-04-26T15:59:36.467 に答える