J'essaie d'implémenter un glisser-déposer senario à partir d'un TreePanel extJs dans un div dans le corps de la page. J'ai suivi un exemple par Saki here.Faites glisser de l'arbre à div
Jusqu'à présent, j'ai le code ci-dessous:
var contentAreas = new Array();
var tree = new Ext.tree.TreePanel({
title : 'Widgets',
useArrows: true,
autoScroll: true,
animate: true,
enableDrag: true,
border: false,
layout:'fit',
ddGroup:'t2div',
loader:new Ext.tree.TreeLoader(),
root:new Ext.tree.AsyncTreeNode({
expanded:true,
leaf:false,
text:'Tree Root',
children:children
}),
listeners:{
startdrag:function() {
$('.content-area').css("outline", "5px solid #FFE767");
},
enddrag:function() {
$('.content-area').css("outline", "0");
}
}
});
var areaDivs = Ext.select('.content-area', true);
Ext.each(areaDivs, function(el) {
var dd = new Ext.dd.DropTarget(el, {
ddGroup:'t2div',
notifyDrop:function(ddt, e, node) {
alert('Drop');
return true;
}
});
contentAreas[contentAreas.length] = dd;
});
La traînée commence et les faits saillants div mais quand je reçois sur la div il ne montre pas comme une cible de dépôt valide et la baisse échoue.
Ceci est ma première incursion dans extJS. Je suis JQuery à travers et à travers et je me bats en ce moment.
Toute aide serait appréciée.
Ian
Modifier
En outre, si je crée un groupe avec un objectif de baisse en elle, cela fonctionne très bien. Quelle est la différence entre la création d'un élément et la sélection d'un élément existant à partir du dom. C'est évidemment là où je me trompe mais je n'en suis pas plus sage. Je dois être capable de sélectionner des éléments dom existants et de les transformer en cibles de largage de sorte que le code ci-dessous ne soit pas une option.
Voici la cible de dépôt qui fonctionne
var target = new Ext.Panel({
renderTo: document.body
,layout:'fit'
,id:'target'
,bodyStyle:'font-size:13px'
,title:'Drop Target'
,html:'<div class="drop-target" '
+'style="border:1px silver solid;margin:20px;padding:8px;height:140px">'
+'Drop a node here. I\'m the DropTarget.</div>'
// setup drop target after we're rendered
,afterRender:function() {
Ext.Panel.prototype.afterRender.apply(this, arguments);
this.dropTarget = this.body.child('div.drop-target');
var dd = new Ext.dd.DropTarget(this.dropTarget, {
// must be same as for tree
ddGroup:'t2div'
// what to do when user drops a node here
,notifyDrop:function(dd, e, node) {
alert('drop');
return true;
} // eo function notifyDrop
});
}
});
Merci, mais cela ne semble pas avoir fait de différence. Ce serait tellement facile dans JQuery! Les cibles de dépôt sont donc créées et stockées dans le tableau contentAreas correctement. Mais la goutte n'est pas valide même si le groupe est le même. Y a-t-il une fonction qui décide si une goutte est valide que je peux remplacer peut-être? Des idées? – madcapnmckay
Votre code semble OK en un coup d'œil. Parfois, l'utilisation d'objets CompositeElements/flyweight (par opposition aux éléments complets avec l'argument vrai) ne fonctionne pas comme prévu pour ce genre de choses, mais c'était juste une supposition. Si vous pouvez montrer un échantillon de votre HTML je parie que je pourrais le résoudre pour vous assez facilement. Très probablement, votre sélection ne renvoie pas les éléments valides ou les DropTargets ne sont pas initialisés correctement avec ces éléments pour une raison quelconque. –