2010-03-15 4 views
1

J'utilise jsTree qui est très agréable. Lorsque vous faites glisser et déposer, je ne me soucie pas vraiment des types avant et après, je veux seulement utiliser à l'intérieur. Ce qui signifie, je suis seulement préoccupé par ce parent dans lequel un enfant est abandonné, plutôt que lorsque l'ordre est avec d'autres éléments à l'intérieur du parent. Donc, je voulais construire mon callback, donc ça fait toujours référence au nœud parent dans lequel il se trouve. Mais, ce n'est pas une preuve infaillible, pour le moment.jsTree: Prévenir avant et après TYPE, seulement utiliser à l'intérieur

onmove : function (NODE,REF_NODE,TYPE,TREE_OBJ,RB) { 
    if (TYPE == 'inside') { 
     alert('Item to move:'+$(NODE).attr('rel')+' to '+$(REF_NODE).attr('rel')+' '+TYPE); 
    } else if (TYPE == 'after') { 
     alert('Item to move:'+$(NODE).attr('rel')+' to '+$(REF_NODE).parent().parent('li').attr('rel')+' '+TYPE); 
    } 
}, 

Quelqu'un at-il des suggestions, comment je peux changer mon rappel, de sorte que le REF_NODE est toujours le parent que le NODE est déplacé dans? Plutôt qu'un frère, qui est un enfant du parent?

Voici un exemple sur jsbin: http://jsbin.com/uroye3/2

Lorsque vous essayez l'exemple, faire glisser d'autres dossiers sur le dossier Modèles. Vous DEVRIEZ être averti que vous déplacez les autres dossiers dans le dossier 4. Mais, si vous essayez différents avant et après de se glisser dans le dossier Modèles, vous êtes parfois indéfini. Donc, les résultats ne sont pas toujours comme prévu. Comme je l'ai dit, je veux juste toujours savoir le dossier parent, dans ce cas 4, qu'un autre dossier est tombé.

+0

Un petit échantillon sur par exemple jsbin serait utile. Et que voulez-vous dire par une preuve pas fou. Dans quels cas ça ne marche pas? – jitter

+0

Exemple jsbin ajouté ... –

Répondre

2

Extrait de la FAQ jstree, cela peut être utile pour vous:

Lors du déplacement ou la création de noeud « à l'intérieur » un autre nœud, le rappel REF_NODE ne pointe pas vers le nouveau nœud parent. Que faire?

Ce n'est pas un bug! Parce que vous pouvez créer des nœuds à une position spécifique parmi les enfants du nœud parent, en passant seulement le nœud parent ne sera pas assez. C'est pourquoi vous devez toujours vérifier l'argument TYPE passé aux rappels ! Si vous voulez travailler toujours avec le nœud parent - ajoutez cette ligne au sommet des callbacks:

if(TYPE != "inside") { 
    TYPE="inside"; 
    REF_NODE = $(NODE).parents("li:eq(0)").get(0); 
} 
Questions connexes