Перетаскивание элементов dnd создает «this.manager.nodes [i] is null» - PullRequest
0 голосов
/ 20 июля 2009

Я сейчас использую Dojo 1.3.1, в основном под FF3.5.

У меня есть источник dnd, который также является целью. Я программно добавляю некоторые узлы внутри, клонируя элементы шаблона. Цель для пользователя - использовать dnd для заказа товаров. Это нормально для одного или двух действий, затем я получил сообщение об ошибке «this.manager.nodes [i] is null» в Firebug, и больше действие dnd не принимается во внимание.

Мой HTML (jsp), частично:

<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>

Мой Javascript для добавления / удаления узлов dnd items, частично:

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);
}

Спасибо за помощь ...

1 Ответ

0 голосов
/ 21 июля 2009

ОК, кажется, что, наконец, просто используя:

actionList.insertNodes(false, [ actNode  ]);

вместо

actionList.insertNodes(true, [ actNode  ]);

исправлено. Pb.

...