Drag and Drop avec seulement un element dans la zone droppable a chaque fois.
Bonjour.
J'utilise Dojo 1.1.1 dans le développement d'un site web.
J'arrive a faire du drag and drop pas de soucis.
Mais je voudrais qu'il n'y ai qu'un seul element dans des zones droppables.
On me demande de faire un truc a la netvibes, avec un nombre de cases
fixes.
J'ai une liste de graphs a gauche et des cases a remplir mais avec un seul
type de graphs a chaque fois.
Lorsque l'on droppe un element, si il y a un element existant alors
cet element est echanger avec l'element droppé:
Est-ce qu'il e"st possible au callback onDndDrop
d'echanger l'element existant entre la source et la target.
J'ai essayé avec insucces , je ne comprends pas ce qu'est _normalizedCreator dans container.js
Est ce que quelqu'un l'a deja fait ?
Voici une partie du source.
Merci d'avance.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| <div class="cartContainer" >
<div dojoType="dijit.layout.BorderContainer" design="sidebar" id="main">
<div dojoType="dijit.layout.ContentPane" region="leading" style="background-color: #acb386; width: 100px;" >
<div id="items" class="dndContainer products" dojoType="dojo.dnd.Source" accept="cartItem" style="height:100%; width: 100px;">
<legend>Stock items</legend>
<div dndType="cartItem" class="dojoDndItem" title="orange" ><img src="BarChartImg/images.jpeg"> orange</div>
<div dndType="cartItem" class="dojoDndItem" title="apple" ><img src="BarChartImg/images2.jpeg"> apple</div>
<div dndType="cartItem" class="dojoDndItem" title="pear" ><img src="BarChartImg/images3.jpeg"> pear</div>
<div dndType="cartItem" class="dojoDndItem" title="pear" > <img src="BarChartImg/images4.jpeg"> pear</div>
<div dndType="cartItem" class="dojoDndItem" title="pear" > <img src="BarChartImg/images5.jpeg"> pear</div>
<div dndType="cartItem" class="dojoDndItem" title="pear" ><img src="BarChartImg/images6.jpeg"> pear</div>
</div>
</div>
<div dojoType="dijit.layout.ContentPane" region="center" style="background-color: #f5ffbf; padding: 10px;">
<table WIDTH=400 HEIGHT=400>
<tr>
<td id="basket_1" class="dndContainer basket" dojoType="dojo.dnd.Source" accept="cartItem">
<script type="dojo/connect" event="onDndDrop" args="source, nodes, copy, target">
var children = target.getAllNodes();
for(var i = 0;i<children.length;i++){
console.debug(children[i]);
}
if(children.length > 1)
{
console.debug("SOURCE "+ source.node.id);
console.debug("TARGET "+ target.node.id);
source.node.appendChild(children[0]);
target.node.removeChild(children[0]);
target.delItem(children[0].id);
//var t = source._normalizedCreator(children[0]);
//source.setItem(t.node.id, {data: t.data, type: t.type});
}
</script>
<legend>Cart</legend>
</td>
<td id="basket_2" class="dndContainer basket" dojoType="dojo.dnd.Source" accept="cartItem">
<legend>Cart</legend>
</td>
</tr>
<tr>
<td id="basket_3" class="dndContainer basket" dojoType="dojo.dnd.Source" accept="cartItem">
<legend>Cart</legend>
</td>
<td id="basket_4" class="dndContainer basket" dojoType="dojo.dnd.Source" accept="cartItem">
<legend>Cart</legend>
</td>
</tr>
</table> |
La solution que j'ai trouvé.
Voici la solution que j'ai trouvé:
je passe par document.getElementById( source.node.id);
pour obtenir la node et lui ajouter. Sinon cela ne marche pas.
Code:
1 2 3 4 5 6 7 8 9 10 11
| if(children.length > 1)
{
var t = target.getItem(child.id);
t.node = child;
source.setItem(t.node.id, {data: t.data, type: t.type});
target.delItem(child.id);
target.node.removeChild(t.node);
var s = document.getElementById( source.node.id);
s.appendChild(t.node);
} |