Ich verwende Dojo 1.3.1, im Wesentlichen unter FF3.5 für jetzt.Ziehen dnd Elemente generiert "this.manager.nodes [i] ist null"
Ich habe eine dnd Quelle, die auch ein Ziel ist. Ich programmiere programmatisch einige Knoten darin, indem ich Vorlagenelemente kloniere. Das Ziel für den Benutzer ist dann, dnd zu verwenden, um die Artikel zu bestellen. Es ist in Ordnung für ein oder zwei Aktionen, dann habe ich den Fehler "this.manager.nodes [i] ist null" in Firebug, dann wird keine dnd-Aktion mehr berücksichtigt.
Mein HTML (jsp), teilweise:
<div id="templates" style="display:none">
<div class="dojoDndItem action" id="${act.name}Template">
<fieldset>
<legend class="dojoDndHandle" >${act.name}</legend>
<input id="${act.name}.${parm.code}." type="text" style="${parm.style}"
dojoTypeMod="dijit.form.ValidationTextBox"
/><br>
</fieldset></div>
</div>
Mein Javascript für das Hinzufügen/Entfernen dnd Artikel Knoten, Teil:
function addActionFromTemplate(/* String */actionToCreate, /* Object */data) {
// value of actionToCreate is template id
var node = dojo.byId(actionToCreate + "Template");
if (node) {
var actNode = node.cloneNode(true);
// make template id unique
actNode.id = dojo.dnd.getUniqueId();
// rename inputs (add the action nb at the end of id)
// and position dojo type (avoid double parsing)
dojo.query("input[type=text], select", actNode).forEach(function(input) {
input.id = input.id + actionsCount;
dojo.attr(input, "name", input.id);
dojo.attr(input, "dojoType", dojo.attr(input, "dojoTypeMod"));
dojo.removeAttr(input, "dojoTypeMod");
});
// insert the action at script's tail
actionList.insertNodes(true, [ actNode ]);
dojo.parser.parse(actNode);
// prepare for next add
actionsCount++;
}
}
function deleteAction(node) {
var cont = getContainerClass(node, "action");
// remove the fieldset action
cont.parentNode.removeChild(cont);
}
Dank für die Hilfe ...
Was Sie haben, sieht gut aus. Rufen Sie sync() in der dojo.dnd.Source auf, nachdem Sie Elemente hinzugefügt/entfernt haben? Kannst du den HTML-Code für deine Quelle veröffentlichen? – seth
Danke für deinen Kommentar, seth. Glaubst du, dass das Aufrufen von sync() besser wäre? Ich dachte, Parsing wäre genug. Die HTML-Quelle ist riesig: als ich herausgefunden habe, dass "insertNodes (false ..." zu reparieren scheint, brauchen Sie es wirklich? – user140140
Wenn Sie die Source-Methoden direkt aufrufen, müssen Sie nicht anrufen sync. Wenn Sie den DOM-Knoten unter Quelle außerhalb der Quelle manipulieren, sollten Sie die Synchronisationsmethode aufrufen: – seth