2012-06-04 50 views
0

我不是懶惰,但嘗試了很多方法嘗試重新載入包含dojo TabContainer(id = dojoTabbedPane)的div(id = refreshable)。每次重新加載頁面後,每個選項卡中的所有內容都會顯示一個堆棧(選項卡丟失)。是否有工作的dojo tabContainer可以在contentPane中成功重新加載?

我做了一些研究,提出問題,並在jQuery加載之前使用dijit.byId("dojoTabbedPane").destroyRecursive();,然後在重新加載後調用dojo.parser.parse(dojo.byId("dojoTabbedPane"));但從來沒有工作。

所以,請問,任何人都可以分享一個簡單的片段,實際上可以讓我看到,一個tabContainer可以看起來沒事,它的容器被刷新了嗎?我發誓我嘗試了許多理論方法,它應該可以工作,但任何人都可以給我看一個非常簡單的代碼,讓我看到它的作品?

我不知道如何在這裏粘貼大塊代碼,否則我會給一個基本示例以便大家有興趣可以幫助修改,在這裏我準備了一個來自Dojo網站的tabContainer,請幫我解決它。謝謝 !!

<script type="text/javascript" 
src="dojo/dojo/dojo.js" 
djConfig="parseOnLoad: true"></script> 

<script type="text/javascript" > 
function refresh_data(url, id) { 
j('#'+id).load(url+' #'+id+' > *', function (response) { 
     dojo.parser.parse(dojo.byId("dojoTabbedPane")); 
}); 
} 
</script> 
<script type="text/javascript"> 
    var login_url = '<spring:url value="/login" />'; 

    j(function() { 
     setInterval('refresh_data("file:///D:/Dojo/dojo.tabbed.pane_very_good.html?hash="+Math.random(), "refreshable");', 9000); 
    }); 
    // this disables errors in IE7 
    function noError(){return true;} 
    window.onerror = noError; 
</script> 
<style type="text/css"> 
@import "dojo/dijit/themes/tundra/tundra.css"; 
</style> 
<script type="text/javascript"> 
dojo.require("dojo.parser"); 
dojo.require("dijit.layout.TabContainer"); 
dojo.require("dijit.layout.ContentPane"); 
</script> 
</head> 
<body class="tundra"> 
    <!-- this div is only for documentation purpose, in real development environments, just take it out --> 
<div style="width: 350px; height: 300px"> 
<div data-dojo-type="dijit.layout.TabContainer" style="width: 100%; height: 100%;"> 
    <div data-dojo-type="dijit.layout.ContentPane" title="My first tab" selected="false"> 
     Lorem ipsum and all around... 
    </div> 
    <div data-dojo-type="dijit.layout.ContentPane" title="My second tab" selected="true"> 
     Lorem ipsum and all around - second... 
    </div> 
    <div data-dojo-type="dijit.layout.ContentPane" title="My last tab" closable="true"> 
     Lorem ipsum and all around - last... 
</div> 
</div> 
</div> 
</body> 
+0

很抱歉地說你的問題提出了更多的問題,然後它提出了一些問題,請細化一下。你面臨的問題是,當contentholder'刷新'時tabcontainer被破壞,你需要重建它。 *'可刷新'*,並且它是否設置了寬度/高度? *爲什麼有jquery調用?* :) *如何從文件返回html:/// *看起來像? – mschr

+0

您需要解析「refreshable」div,而不是放入其中的「dojoTabbedPane」div。 – Frode

+0

@mschr對不起,我感到困惑。該要求要求自動刷新頁面的一部分(div中'可刷新'),所以我調用javascript函數setInterval每30秒調用一次$ JQuery.load。我使用jQuery的原因是因爲dojo.xhrGet無法處理大量數據。 '可刷新'沒有寬度/高度。這種關係更像'

....
'(這裏我忽略了內容和dojo類型等)。請分享任何意見。非常感謝你。 :) – Dreamer

回答

2

其針對jQuery的,負載是否已經設置媒體鏈接的innerHTML在完成回調運行時間#replaceable的。但只是取消註釋超時線「脫鉤」,讓加載機制之前完成問題調用解析器。所以試試這個:

<div id="replaceable"> 

</div> 

<script> 
function refresh_data(url, id) { 

    var w = dijit.byId("dojoTabbedPane"), 
     domNode = dojo.byId(id); 
    if(w) w.destroyRecursive(); 

    j(domNode).load(url+' #'+id+' > *', function (response) { 
     // setTimeout(function() { 
     dojo.parser.parse(domNode); 
     w = dijit.byId("dojoTabbedPane"); 
     w.resize(dojo.getMarginBox(domNode)); 
     // }, 200); 

    }); 
} 

dojo.addOnLoad(function() { 
    var login_url = '<spring:url value="/login" />'; 
    setInterval('refresh_data("file:///D:/Dojo/dojo.tabbed.pane_very_good.html?hash="+Math.random(), "refreshable");', 9000); 
}); 
</script> 
+0

這是一個非常棒的反饋,非常感謝。然而,即使我在jQuery中取消註釋setTimeout時,tabContainer中的內容仍然顯示在沒有標籤的堆棧上。所以我想在Dojo TabContainer中可能會有問題在重新加載後得到渲染?看起來tabContainer在再次解析後再也看不到了。 – Dreamer

+1

@Subarule:標籤容器第一次看起來是否正確(在refresh_data將其替換爲新的之前)?如果我沒有記錯,如果選項卡不適合給定的空間(例如,如果寬度太小),則選項卡將變爲下拉菜單。是這樣嗎?看到我的嘗試在這裏:http://fiddle.jshell.net/zdSZq/ – Frode

+0

@Frode是它的第一次正常工作,其餘的時間刷新後沒有任何標籤。我看到這裏唯一的區別是我仍然在dojo 1.6.1上這可能是一個問題嗎?謝謝 – Dreamer

相關問題