2013-03-11 103 views
0

使用Dojo庫運行此代碼時出現widget is already registered錯誤。dojo小部件已經註冊

enter image description here

在控制檯中,我可以看到,有這個ID的窗口小部件,但我不能破壞它。

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 2013-03-12 01:33:15

+0

這發生在我身上,當我用各種'dojo/domReady!'和'dojo/ready'調用進行錯誤的操作時。確保你的解析和訪問是有序的。簡化,簡化,簡化,然後從那裏調試。 – Phix 2013-03-12 06:13:49

+0

謝謝,但道場讓我生氣! – 2013-03-12 08:23:47

回答

1

您需要清除任何已創建的Dijits ID的註冊表。在我的項目中,我們創建了一個幫助函數來爲我們做這件事:

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); 
        } 
       } 
      } 
相關問題