2010-11-16 2 views
0

J'ai une mise en œuvre de DnD mais j'ai rencontré des problèmes. Il semble que si je mets dojo.dnd.Source.checkAcceptance à true, le conteneur Source je fais ça pour arrêter de vérifier le dndType, il accepte tout.Est-ce que modifier dojo.dnd.Source.checkAcceptance à true affecte la vérification de type?

Je vérifie s'il y a un nœud présent dans le conteneur dojo.dnd.Source, si je veux désactiver la suppression. Je le fais deux fois car si le contenu est déjà présent lors du chargement de la page, nous souhaitons désactiver la suppression de contenu supplémentaire et autoriser uniquement le conteneur Source à contenir 1 noeud. De même pour l'événement onDrop.

Si checkAcceptance = false, alors cela fonctionne et n'accepte aucune baisse, cependant si checkAcceptance = true alors il accepte tout. J'utilise Dojo version 1.4.2.

Voici le code incriminé:
var contentSourceA = new dojo.dnd.Source ("ContentCol", {accept: ["contentItem"]});
si (dojo.query ("# ContentCol") [0] .children.length> 1) {
contentSourceA.checkAcceptance = function() {return false;}
} else {
contentSourceA.checkAcceptance = function() {return true;}}

dojo.connect (contentSourceA, 'onDrop', fonction (source, noeud, copie) {
if (dojo.query ("# ContentCol") [0] .children. longueur> 1) {
contentSourceA.checkAcceptance = function() {return false;}
} else {
contentSource A.checkAcceptance = function() {return true;}
}
});

D'où ma question: Est-ce que changer dojo.dnd.Source.checkAcceptance affecte la fonctionnalité de vérification de type? Si non, qu'ai-je fait de mal ici? Devrais-je le faire via l'un des événements thématiques?

Répondre

1

La logique de vérification de type est encapsulée dans l'implémentation par défaut de la fonction dojo.dnd.Source.checkAcceptance. Si vous remplacez cette fonction, la logique par défaut est perdue.

Vous pouvez créer votre propre classe source DnD en héritant dojo.dnd.Source:

dojo.declare("AcceptOneItemSource", dojo.dnd.Source, { 
    checkAcceptance : function(source, nodes) { 
     if (this.node.children.length > 1) { 
      return false; 
     } 
     return this.inherited(arguments); 
    } 
}); 
Questions connexes