2012-04-25 43 views
0

我试图使用dojox.widget.Standby。我希望在执行其他代码的同时显示待机状态,然后隐藏一次完成。但是,我的待机似乎只有在我打电话给standby.hide()时才会显示。代码如下:dojox.Standby不显示,直到.hide()被调用

standby = new dojox.widget.Standby({ 
    target : "map-id" 
}); 

     <div id="map-id" class="centerPanel" 
     data-dojo-type="dijit.layout.ContentPane" 
     data-dojo-props="region: 'center', style: 'width: 1300px;'"> 
     <span id="toolbar"></span> 
     <div id="co-ords" style="position:absolute; bottom:0px; z-index:1000; font-size:8; font-weight:bold; background-color: #FFFFFF"></div> 
    </div> 

任何人都知道发生了什么事?我也在努力用dojo.connect来捕捉onShow事件...

dojo.connect(standby, "onShow", function(){ 
    console.log("standby onShow"); 
}) 

谢谢!

更新 - 调用standby.hide()显示我在FireFox插件而不是Chrome浏览器

回答

2

不包装在显示和隐藏调用之间的代码碰巧是同步的xhrget/xhrpost ajax调用?当sync = true时,所有浏览器操作完全停止,因此在调用完ajax调用完成后,待机动画只会显示和隐藏,同时调用.hide()。如果是这样,并且您有多个需要同步操作的调用,那么您可以将它们设置为异步并将它们链接到它们的响应函数中。

0

我发现,我总是需要添加以下行创建备用部件时:

dojo.body().appendChild(standby.domNode); 
+0

干杯克雷格,但我恐怕还没有解决它。仍然需要调用standby.hide()来查看事情 – 2012-04-25 14:25:19

0

如果你真的需要synchoronous调用,而不是使用待机,你可以尝试做这样......

dojo.byId('loading_status').innerHTML='Loading 0%...'; 
sync_ajax_call_1(); 
dojo.byId('loading_status').innerHTML='Loading 25%...'; 
sync_ajax_call_2(); 
dojo.byId('loading_status').innerHTML='Loading 50%...'; 
sync_ajax_call_3(); 
dojo.byId('loading_status').innerHTML='Loading 75%...'; 
sync_ajax_call_4(); 
dojo.byId('loading_status').innerHTML='Loading 100%...'; 

dojo.byId也可以用dom.byId被取代或$(jQuery中)或getElementById

0

还确保map-id元素在启动时的高度等于零。 待机状态正常工作很常见,但它位于一个没有高度或宽度的元素内,或者没有这两个元素,所以最终没有任何显示。