2012-08-25 3 views
1

Je voudrais redimensionner un BorderContainer dijit sur l'événement onClick d'un titlePane mais le comportement de la fonction de modification de taille est très étrange (Resize() fonctionne uniquement après le second clic). Voici le code que j'utilise:Redimensionner BorderContainer onClick titlePane

<div data-dojo-type="dijit.layout.BorderContainer" id="borderContainer"> 
<div data-dojo-type="dijit.TitlePane" region="top" id="titlePane" title="Title"> 
    <script type="dojo/method"> 
     dojo.connect(dijit.byId("titlePane"), "onClick", function(){dijit.byId("borderContainer").resize()}); 
    </script> 
</div> 
<div data-dojo-type="dijit.layout.TabContainer" region="center" id="tabContainer"> 
    <div data-dojo-type="dijit.layout.ContentPane" id="contentPane" title="content" selected="true"> 
     This is the content 
    </div> 
</div> 

Avez-vous déjà vu ce comportement? Votre expertise serait très appréciée. Merci

Répondre

4

En fait, resize() travaille aussi la première fois, mais vous ne pouvez pas voir quoi que ce soit qui se passe parce que vous devez appeler resize() pas immédiatement après onClick se produit, mais après les titlePane's Resize d'animation (200 ms plus tard par défaut), car sinon borderContainer redimensionne à la même taille.

C'est ce que je propose:

dijit.byId("titlePane").watch("open", function(param, oldValue, newValue) { 
    var animation = newValue ? this._wipeIn : this._wipeOut; 
    var handler = dojo.connect(animation, "onEnd", this, function() { 
     dijit.byId("borderContainer").resize();  
     dojo.disconnect(handler);    
    }); 
}); 

Voir un exemple de travail à jsFiddle: http://jsfiddle.net/phusick/E5CwV/

EDIT: la réflexion, vous pouvez également créer des connexions permanentes sur ces deux animations, mais mon avis, il conduira à moins de code lisible:

var titlePane = dijit.byId("titlePane"); 
var borderContainer = dijit.byId("borderContainer"); 
dojo.connect(titlePane._wipeIn, "onEnd", borderContainer, "resize"); 
dojo.connect(titlePane._wipeOut, "onEnd", borderContainer, "resize"); 
+0

Merci beaucoup pour votre réponse rapide. J'ai complètement oublié le temps pour l'animation ... Votre exemple fonctionne parfaitement. L'espoir qui peut aider beaucoup poeple. Merci phusick! – user1390837

Questions connexes