2012-01-16 5 views
0

У меня возникла проблема с использованием ExtJS4.ExtJS4: перетащить с дерева на панель

Мое приложение имеет дерево, содержащее строку, представляющую сотрудника.
Внутри этого дерева перетащите & капли работают просто отлично.
Теперь я пытаюсь создать панель, на которую можно перетащить сотрудника для удаления.

Таким образом, я позволяю ExtJS создавать новый Ext.dd.DDTarget, определять требуемый dragzone (и это часть, которая работает, потому что она признана как действительная цель для удаления) ... но когда я бросаю сотрудника , Ничего не произошло. Я просто не могу понять, какой слушатель использовать и где именно его использовать ...

И я действительно не знаю, в какой части моего кода я должен опубликовать этот вопрос, чтобы поддержать вас в поддержке меня (: D) ... так что я просто после того, что я думаю, что я должен размещать и редактировать этот пост, если что-то не хватает ... :-)

так вот мой DDTarget:

var trashDDTarget = Ext.create('Ext.dd.DDTarget', 'trashTarget', 'trashDrag'); 

где «trashTarget» - это панель (так ниже) и «trashDrag» имя dragGroup ...

targetPanel:

var trashPanel = Ext.create('Ext.panel.Panel', { 
title: 'Trash!', 
id: 'trashTarget', 
width: 400, 
height: 150, 
renderTo: 'trash', 
bodyStyle: 'background-image: url(/images/trash_can.png) !important' 
}); 

И это одна из моих идей, чтобы решить эту проблему:

Ext.override(Ext.dd.DDTarget, { 
onDragDrop : function(evtObj, targetElId) { 
    console.log(evtObj); 
}, 
onInvalidDrop: function(evt) { 
    console.log(evt); 
} 
}); 

переопределение некоторых слушателей; но это не сработает.
Я надеюсь, что я не запутать вас, и что, может быть, кто-то может мне помочь ... :-)

Заранее спасибо
gilaras

------------ ---------------- UPDATE:

Я изменил панель к GridPanel ...
Когда я перетащите элемент на него, он исчезает из дерева. ..
... но он не срабатывает ни в одном событии, указанном в документах ...
Моя новая панель выглядит следующим образом:

var trashPanel = Ext.create('Ext.grid.Panel', { 
title: 'Trash!', 
id: 'trashTarget', 
width: 400, 
viewConfig: { 
    plugins: { 
    ptype: 'gridviewdragdrop', 
    dropGroup: 'trashDrag', 
    dragGroup: 'trashDrag', 
    dragText: 'In den Papierkorb ziehen, um zu löschen...' 
    } 
}, 
height: 150, 
renderTo: 'trash', 
columns:[ 
    { 
    hidden: true 
    } 
], 

bodyStyle: 'background-image: url(/images/trash_can.png) !important' 
}); 

Но как-то это не работает, либо ...

+0

Ну, он держит на дель «Привет всем :-)», так что представьте себе ... :-P – gilaras

+0

Хорошо, решил ... но так как мне пока не разрешено публиковать мое решение ... Я сделаю это через некоторое время ;-) – gilaras

ответ

1

Хм хорошо, я думаю, я нашел решение ;-)
может быть не самый лучший, но достаточно для того, что мне нужно: D
Я отправлю мое решение здесь, так что, возможно, когда-нибудь кто-то ищет помощь на эту тему может найти :-)

Моя проблема (и точка, которая была неправильной в моих мыслях об этом) была, что я не знать, где поймать события ...или, по крайней мере, теперь он работает, когда ловить его в viewConfig из GridPanel :-)

Так вот моя новая панель:

var trashPanel = Ext.create('Ext.grid.Panel', { 
title: 'Trash!', 
id: 'trashTarget', 
width: 400, 
viewConfig: { 
    plugins: { 
    ptype: 'gridviewdragdrop', 
    dropGroup: 'trashDrag', 
    dragGroup: 'trashDrag', 
    dragText: 'In den Papierkorb ziehen, um zu löschen...' 
    }, 
    listeners: { 
    drop: function(node, data, overModel, dropPosition) { 
     console.log('Mitarbeiter mit ID ' + data.records[0].internalId + ' gedropt!'); 
     var antwort = function(btn){ 
     if(btn.indexOf('no') != -1){ 
      treeStore.load(); 
     } else { 
      Ext.Ajax.request({ 
       url: '/app/loeschenPage', 
       params: 
       { 
       id: data.records[0].internalId 
       }, 
       method: 'GET', 
       success: function() { 
       Ext.MessageBox.alert("Und tschüss...", "Mitarbeiter erfolgreich aus der Datenbank gelöscht."); 
       treeStore.load(); 
       } 
      }); 
     } 
     }; 
     Ext.MessageBox.confirm('Wirklich löschen?', 'Soll der Mitarbeiter WIRKLICH FUER IMMER geloescht werden? Das ist eine sehr lange Zeit...', antwort); 

    } 
    } 
}, 
height: 150, 
renderTo: 'trash', 
columns:[ 
    { 
    hidden: true 
    } 
], 

bodyStyle: 'background-image: url(/images/trash_can.png) !important' 
}); 

Спасибо в любом случае, писать мою проблему вниз на самом деле помог мне думать о это по-другому :-)

0

Для предотвращения удаления данных из дерева, вы должны установить свойство в viewConfig:

viewConfig:{ copy: true; } 
Смежные вопросы