Javascript 是否有可以在contentPane中成功重新加载的dojo tabContainer?

Javascript 是否有可以在contentPane中成功重新加载的dojo tabContainer?,javascript,dom,dojo,Javascript,Dom,Dojo,我并不懒惰,但已经尝试了许多方法尝试重新加载一个div(id=refreshable),其中包含一个dojo TabContainer(id=dojoTabbedPane)。每次重新加载页面后,每个选项卡中的所有内容都会显示一个堆栈(缺少选项卡) 我做了一些研究,问了一些问题,并使用dijit.byId(“dojoTabbedPane”).destroyRecursive()在jQuery加载之前,然后调用dojo.parser.parse(dojo.byId(“dojoTabbedPane”)

我并不懒惰,但已经尝试了许多方法尝试重新加载一个div(id=refreshable),其中包含一个dojo TabContainer(id=dojoTabbedPane)。每次重新加载页面后,每个选项卡中的所有内容都会显示一个堆栈(缺少选项卡)

我做了一些研究,问了一些问题,并使用
dijit.byId(“dojoTabbedPane”).destroyRecursive()在jQuery加载之前,然后调用
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>

函数刷新\u数据(url、id){
j('#'+id).load(url+'#'+id+'>*',函数(响应){
parser.parse(dojo.byId(“dojoTabbedPane”);
});
}
var login_url='';
j(职能(){
setInterval('refresh_data('file:///D:/Dojo/dojo.tabbed.pane_very_good.html?hash=“+Math.random(),“可刷新”);”,9000);
});
//这将禁用IE7中的错误
函数noError(){return true;}
window.onerror=noError;
@导入“dojo/dijit/themes/tundra/tundra.css”;
require(“dojo.parser”);
require(“dijit.layout.TabContainer”);
require(“dijit.layout.ContentPane”);
Lorem ipsum和周围的人。。。
Lorem ipsum和全方位-秒。。。
Lorem ipsum和全方位-最后。。。

这是一个关于jQuery的问题,在整个回调运行时,load是否已将#replacement的allready设置为innerHTML。。但只需将超时行取消注释为“unhook”,并让加载机制在调用解析器之前完成。所以试试这个:

<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>

函数刷新\u数据(url、id){
var w=dijit.byId(“dojoTabbedPane”),
domNode=dojo.byId(id);
如果(w)w.recursive();
加载(url+'#'+id+'>*',函数(响应){
//setTimeout(函数(){
parser.parse(domNode);
w=dijit.byId(“dojoTabbedPane”);
w、 调整大小(dojo.getMarginBox(domNode));
// }, 200);
});
}
dojo.addOnLoad(函数(){
var login_url='';
setInterval('refresh_data('file:///D:/Dojo/dojo.tabbed.pane_very_good.html?hash=“+Math.random(),“可刷新”);”,9000);
});

很抱歉,您的问题提出的问题比它提出的问题多,请再细化一点。您面临的问题是,当contentholder“刷新”时,tabcontainer会被破坏,您需要重建它。“可刷新”的位置,是否设置了宽度/高度?为什么会有jquery调用?:)从文件:///返回的html是什么样子的?您需要分析“refreshable”div,而不是放在其中的“dojoTabbedPane”div。@mschr很抱歉造成混淆。该需求要求自动刷新页面的一部分(div“refreshable”中的内容),因此我调用javascript函数setInterval,每隔30秒调用$JQuery.load。我使用jQuery的原因是dojo.xhrGet无法处理大量数据。“可刷新”没有宽度/高度。这种关系更像是
(这里我忽略了内容和dojo类型等)。请分享任何意见。非常感谢。:)@Frode再次感谢您的回答:D.我是在jQuery加载之前还是在jQuery加载中解析'refreshable'div?这是一个很好的反馈,非常感谢。但是,即使我在jQuery中取消对setTimeout的注释,tabContainer中的内容仍然显示在没有标记的堆栈上。所以我想Dojo TabContainer在重新加载后可能会出现一些问题?似乎tabContainer在再次解析后永远不会看起来正常。@子规则:tab容器第一次看起来正常吗(在refresh\u data将其替换为新容器之前)?如果我没有记错,如果选项卡无法在给定的空间中放置(例如,如果宽度太小),则选项卡将变为下拉菜单。是这样吗?请看我在这里的尝试:@Frode是的,它第一次工作正常,其余时间在刷新后完全没有标签。我看到这里唯一的区别是我仍然在Dojo1.6.1上,这可能是个问题吗?Thanks@Subarule事实上,在1.6版本中,只有切换到使用“dojoType”而不是“data dojo type”,我才能让它工作。我以为1.6支持这两个,但我可能错了。在1.6版本之前,您必须使用dojoType。要使tabcontainer正确布局,它必须在包含节点样式(无论是否从样式表计算)中,在其自己的样式属性1)中设置维度。我记得,如果parentNode具有可计算的高度/宽度,则调用tabContainer.resize()时不带任何参数会使它尽可能地填充