2013-03-11 3 views
0

Я получаю ошибку widget is already registered при запуске этого кода с использованием библиотеки Dojo.dojo виджет уже зарегистрирован

enter image description here

В консоли я могу видеть, что есть виджет с этим идентификатором, но я не могу уничтожить его.

function layoutDialog2(data, taskBoard, idName) 
{ 
    var _idName = idName; 
    var _taskBoard = taskBoard; 
    var d = addDialog(); //dialog 
    var idD = d.get("id"); //random ID 
    var f = addNew(d, Form, {id: "f"+idD, style: "border: 1px solid red"}); 
    var c = addNew(d, ContentPane, {id: "cp"+idD});  

    for (var i=0; i<7; i++) 
    { 
     var l1 = addNew2(f, "label", {style: "1px solid green"}); 
     var span1 = addNew2(l1, "span", {innerHTML: "a"+i+": "}); 
     var t1 = addNew(l1, TextBox, {name: "a"+i, value: data["a"+i]}); 
     var br1 = addNew2(l1, "br", {});   
    } 

    var b1 = addNew(c, Button, {label: "Change", onClick: function() { change(); }}); 
    var b2 = addNew(c, Button, {label: "DELETE", onClick: function() { deleteTask(); }}); 

    function change() 
    { 
     console.log(_taskBoard); 
     _taskBoard.destroyRecursive(); 
     console.log(_taskBoard); 

     var v1 = registry.byId("f"+idD); //get form value 
     var v1 = v1.get("value"); 
     layoutTask(v1); 
     _taskBoard.destroyRecursive(); 
    } 

    function deleteTask() 
    { 
     _taskBoard.destroyRecursive(); 
    } 

    d.show(); 
} 
+0

Можете ли вы опубликовать всю ошибку или, по крайней мере, конкретно, что означает 'ID', который он говорит? Что вы подразумеваете под словом «Я не могу его уничтожить»? Вы получаете еще одну ошибку за это? – Default

+0

Это случилось со мной, когда у меня был плохой порядок операций с различными вызовами dojo/domReady! И 'dojo/ready'. Убедитесь, что ваш синтаксический анализ и доступ к ним в порядке. Упростите, упростите, упростите, а затем отлаживайте оттуда. – Phix

+0

спасибо, но доджо заставляет меня сходить с ума! –

ответ

1

Вам необходимо очистить реестр от любых идентификаторов уже существующих Dijits. В моем проекте мы создали вспомогательную функцию, чтобы сделать это для нас:

destroyFieldsByIdArray: function (fieldIdArray) { 
       var i, 
        idToDestroy; 
       for (i = 0; i < fieldIdArray.length; i += 1) { 
        idToDestroy = fieldIdArray[i]; 
        if (dijit.byId(idToDestroy)) { 
         dijit.byId(idToDestroy).destroyRecursive(true); 
        } 
       } 
      } 
Смежные вопросы