2010-11-14 129 views
4

嗨我有一個頁面左側的導航菜單,當點擊此菜單上的任何鏈接 時,Ajax get調用被髮送到服務器和 右側獲取更新與新頁。ajax頁面加載-Dojo

如何我目前做的,這是通過創建2列,左邊的山坳 包含導航鏈接,右側山坳contans一個名爲 內容DIV具有dojox.layout.ContentPane.Now的的dojoType當 數據從服務器接收到的,我改變它的內容是這樣

dijit.byId("thecontent").setContent=data 

現在,當我點擊導航鏈接,右側得到 正常顯示(本頁面已經dijit的,也有一些腳本 手柄的onclick事件)。但是螢火蟲返回一個錯誤,說

"Tried to register widget with id==thecontent but that id is already registered" 

我的主要道場包括如下所示: -

<script type="text/javascript" src="http://o.aolcdn.com/dojo/1.5/dojo/dojo.xd.js"djConfig="parseOnLoad:false"></script> 

我做dojo.parser.parse()函數中dojo.addOnLoad這樣的: -

dojo.addOnLoad(function(){ 
    dojo.require("dijit.form.Button"); 
    dojo.require("dijit.form.Textarea"); 
    dojo.require("dijit.form.ValidationTextBox"); 
    dojo.require("dojox.layout.ContentPane"); 
    dojo.require("dijit.Editor"); 
    dojo.addOnLoad(function(){ 
     dojo.parser.parse(); 
     sendgetrequest();//this initiates the xhrget request 
     dojo.removeClass(dojo.byId("doc3"),"hiddendiv"); 
     } 

); 
    }) 

我也無法在這個新加載的頁面中運行任何腳本。沒有onclick事件正在工作,只顯示dijit小部件...

+0

你的意思是有嵌套的addOnLoad調用?可能需要查看整個頁面以查看發生了什麼。 – peller 2010-11-14 16:37:53

+1

四件事:(1)頂端代碼應該是'setContent(data)'而不是'setContent = data',但我認爲你可能在你的實際代碼中有正確的代碼。 (2)這個錯誤意味着你試圖用相同的id實例化一個小部件兩次 - 要麼你需要唯一的ID,要麼你並沒有真正銷燬你想要替換的小部件。 (3)@peller,嵌套addOnLoads在這裏完成的方式是有效的,但真正的外部addOnLoad可能根本不需要。 (4)迴應peller,這將有助於查看更多上下文的代碼 - 即點擊導航鏈接時究竟發生了什麼。 – 2010-11-16 00:20:47

回答

1

錯誤的意思,正如Ken所說的,您正在創建一個已存在的id的dijit。我的猜測是你會在右面板中加載AJAX內容而不會首先破壞舊的右面板。

在加載新內容之前,嘗試在右側面板的主dijit容器上調用destroyRecursive。另外,如果你不需要設置dijit的id,你可能會放棄id(但是這會留下一個記憶洞,因爲舊的dijits沒有被銷燬)。