1

ページの Container AにExtJS ツリーパネルがあり、別のContainer Bがあります。

ツリーパネルは、Ajax 呼び出しを介してアイテムで初期化されます。viewConfigツリーパネルの に、追加itemaddした項目を DragSource として登録するイベント リスナーを追加しました。以下は、treepanelitemadd内のイベント リスナーです。viewConfig

'itemadd': function(records, node){
    // Iterate over each child record of parent node in treepanel.
    Ext.each(records, function(record){
        var dragSource,
            field,
            fieldId;
        field = Ext.query('[id='+record.data.listId+']')[0]; // I've manually added 'listId' which has unique value gained from Ext.id() for each record item.
        fieldId = field.id;
        dragSource = new Ext.dd.DragSource(field, {
            isTarget  : false
        });

        dragSource.dragData = {
            record: record
        };
    });
}

Container Bのアイテムには、内部MyViewに拡張するという名前の View を追加しました。Ext.container.Containerそのためafterrenderコンテナ Bで、自分自身を として登録していDropTargetます。これが私がそれを行う方法です。

'afterrender': function(containerMain) {
    var dropZone,
        myView = Ext.ComponentQuery.query("myview")[0];

    dropZone = new Ext.dd.DropTarget(containerMain.getEl()); // Register Container B as DropTarget.

    dropZone.notifyDrop = function(source, event, params) {
        myView.doSomething(params.record); // This method will handle data of dropped record and internally show something on UI.
    };
}

ここで、ステップバイステップの使用法で説​​明されている問題があります。

  • 初めてツリーパネルからコンテナ B に項目をドラッグすると、意図したとおりに正常に動作します。
    • 重複したアイテムを に再度追加することはできませんMyView。追加された各アイテムには、MyView から削除するための [削除] ボタンがあります。
  • 追加した項目を削除します。
  • treepanel から再度ドラッグしようとしましたが、ドラッグ可能なアイテムではなくなりました
    • 同じツリーパネルから別のアイテムをドラッグして追加することはできますが、以前に追加して削除した最初のアイテムはできません (一度追加したすべてのアイテムで同じことが起こりMyViewます。再現するためにアイテムを削除する必要はないことに注意してください)。問題、それを追加するだけでこれが発生します。

では、ここで何が間違っているのでしょうか?

どんな助けでも素晴らしいでしょう。

4

1 に答える 1