我有一個TabContainer,我添加ContentPanels。我的要求要求,我每次都重新加載此TabContainer(ContentPanels中的不同內容),我單擊網格上的新行(由同一頁面中的ajax生成)。 最初,當我遇到id已經註冊的問題時,我使用了destroyRecursive,正如在這裏的答案中的一個建議中所見。 現在,使用後,我得到以下結果:身份證已經註冊dojo
結果後,我點擊任何行,第一次: 就像我想要的方式,容器和3個內容窗格。
我點擊任何一行,第二次和任何其他時間後的結果: 具有3個內容窗格的新容器放在具有3個內容窗格的舊容器的頂部。 無論我點擊多少行,結果總是有2個容器,新的放在舊容器的上面。
下面是我用過的代碼。
<div id = "tabsContainer">
<div id="tabPanels" data-dojo-type = "dijit/layout/TabContainer"></div>
</div>
function getTabPanelsForTheRow() {
require(["dijit/layout/TabContainer",
"dijit/layout/ContentPane"], function (TabContainer, ContentPane) {
var tc = new TabContainer({}, "tabPanels");
var cp1 = new ContentPane({
title: "Contacts",
content: "These are the activities"
});
tc.addChild(cp1);
var cp2 = new ContentPane({
title: "Activities",
content: "These are the activities"
});
tc.addChild(cp2);
var cp3 = new ContentPane({
title: "Opportunities",
content: "We are known for our drinks."
});
tc.addChild(cp3);
tc.startup();
});
}
function destroyTabPanel() {
require(["dijit/layout/TabContainer"], function (TabContainer) {
var tp = dijit.byId("tabPanels");
tp.destroyRecursive(true);
});
}
每次,我點擊一排,我米調用destroyTabPanel()首先,然後我打電話是getTabPanelsForTheRow()。
謝謝你。我收到了您的第一個建議所需的結果。我是道場新手,因此無法獲得第二個建議。順便說一下,我試過這個:'function destroyTabPanel(){[dijit/layout/TabContainer','dojo/dom-construct'], function(TabContainer){var ejm = dijit.byId(「如果(elem.hasChildren()){ domConstruct.empty(「tabPanels」); } }); }' – Sandy
在另一個函數中,我不直接創建新的TabContainer,而是直接說dijit.byId(「tabPanels」),其餘部分是相同的。當我這樣做時,我只能第一次創建面板。其餘的時間,我沒有顯示任何東西。 – Sandy
您可以定義自己的擴展dijit._widgetBase的小部件,這個小部件將在您的容器'div'上聲明。小部件本身會實例化TabContainer和麪板,存儲對數組或對象中面板的引用。然後在頁面加載中實例化這個小部件。然後更改事件偵聽器,或者直接引用您的小部件並調用自定義方法「updatePanels」或其他東西,或者可以使用dojo的發佈/訂閱功能併發布小部件訂閱的請求。我可以發送一個例子,如果你喜歡... –