2013-10-03 2 views

ответ

0

Путь переопределить сопротивление по умолчанию и падение реализации в ExtJS выглядит следующим образом:

v.dropZone = new Ext.dd.DropZone(v.getEl(), { 

    // GetTarget 
    getTargetFromEvent : function(e) { 
    return { 
     x : e.getX() - this.DDMInstance.deltaX, 
     y : e.getY() - this.DDMInstance.deltaY 
    }; 
    }, 

    // OnNodeOver 
    onNodeOver : function(target, dd, e, data) { 
    var rv = Ext.dd.DropZone.prototype.dropNotAllowed; 
    if (data && data.selectedRecords.length == 0) { 
     return Ext.dd.DropZone.prototype.dropNotAllowed; 
    } else { 
     rv = Ext.dd.DropZone.prototype.dropAllowed; 

     Ext.Array.each(data.selectedRecords, function(selRec, index) { 
     if (v.getStore().find('id', selRec.getId()) > -1) { 
      rv = Ext.dd.DropZone.prototype.dropNotAllowed; 
     } 
     }); 
     return rv; 
    } 

    }, 

    // OnNodeDrop 
    onNodeDrop : function(target, dd, e, data) { 
    var dropValid = true; 
    Ext.Array.each(data.selectedRecords, function(selRec, index) { 
     if (v.getStore().find('id', selRec.getId()) == -1) { 
     v.getStore().add(selRec); 

     // set selection 
     data.dataView.getSelectionModel().select(selRec.index); 

     } else { 
     dropValid = false; 
     } 
    }); 
    return dropValid; 
    } 
}); 

Где v является на Dropzone (а GridPanel, DataView или любой другой компонент). Как вы можете видеть, я добавил некоторую логику, которая запрещает удаление одного и того же элемента несколько раз.