2010-01-19 6 views
0

Je dois appeler une fonction qui modifie l'acceptation dnd.source précédemment créée. Toute idée de comment changer un dojo.dnd.source serait utile. Code que j'ai utilisé pour créer:comment obtenir/définir une acceptation d'un dojo.dnd.source

var catalog = new dojo.dnd.Source('div_catalog', { accept: ['inStock'] }); 

désolé pour mon anglais, je suis encore en train d'apprendre. Merci encore.

Répondre

0

J'ai trouvé une autre façon de résoudre le problème, mais ce n'est pas très bon. J'ai simplement enlevé le div qui contient le dnd.source et a créé un nouveau dnd.source avec une acceptation différente. Le code I utilisé:

var element = dojo.byId(user_id);<br /> 
var element_father = element.parentNode;<br /> 
element_father.removeChild(element);<br /> 
var div = document.createElement("div");<br /> 
div.setAttribute('id',element.id);<br /> 
element_father.appendChild(div);<br />   
var catalog = new dojo.dnd.Source(element.id, {accept: ['outStock']}); 

J'espère que quelqu'un sait comment configurer un dnd.source existant

+0

Avez-vous essayé catalog.accept = ['otherValue']? Je n'ai pas vérifié ... juste une supposition ... – Philippe

2

je joué avec, et je découvre que la propriété « accepter » semble ne pas être un Array comme le suggère le manuel du dojo. Il apparaît comme une sorte d'Object (Other than Array) dans le débogueur de chrome avec un attribut appelé "text" à la valeur 1 par défaut. L'accès comme element.accept = ""; pour le désactiver fonctionne, mais après il n'y a pas de retour à l'activer en utilisant la même méthode et en essayant quelque chose comme element.accept = ['text']; J'ai aussi essayé d'y accéder par element.accept.text et cela ne semblait pas marcher une fois l'objet instancié . Pour mon application, je devais autoriser un élément unique à figurer dans chaque td d'une table, et j'ai utilisé la fonction suivante pour cela et conserver l'ordre des éléments dans la table en utilisant une variante de celle listée ici. Je pensais que cela valait la peine d'être mentionné.

function changeAccept(source) 
{ 
    var element = document.getElementById(source.node.id); 
    console.log("element:"+element); 
    var element_father = element.parentNode; 
    var td = document.createElement("td"); 
    td.setAttribute('id',element.id); 
    element_father.replaceChild(td,element); 

    var newsource = new dojo.dnd.Source(element.id, {accept: ['text']}); 

    dojo.connect(newsource, "onDrop", function(source, nodes, copy) { 
     console.log("Dropped", newsource, source, nodes, copy); 
     newsource.accept = ""; 
     changeAccept(source); 
    }); 

    return newsource; 
} 

var priorelement = new dojo.dnd.Source(element.id, {accept: ''}); //disabled 
changeAccept(priorelement); //enabled and in same position in table 
1

Je faisais face au même problème et j'ai trouvé la solution. Il est assez facile en fait:

source var = new dojo.dnd.Source ("idDiv", {accepte: []}); // Nous pouvons utiliser aussi dojo.dnd.AutoSource

La source créée n'accepte plus rien. Pour changer l'acceptation, nous devons ajouter une propriété à sa acceptent domaine comme celui-ci:

source.accept["acceptType"] = 1; 

Et même pour le supprimer:

delete source.accept["acceptType"]; 

J'espère que cela aidera quelqu'un.

Questions connexes