ExtJS4: перетаскивание из дерева в панель - PullRequest
0 голосов
/ 16 января 2012

У меня проблема с использованием ExtJS4.

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

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

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

Итак, вот моя цель DDT:

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

где 'trashTarget' - панель (как показано ниже), а 'trashDrag' - имя dragGroup ...

Целевая панель:

  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:

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

 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'
});

Но почему-то это тоже не работает ...

Ответы [ 2 ]

1 голос
/ 17 января 2012

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

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

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

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 голосов
/ 22 января 2013

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

viewConfig:{ copy: true; }
...