2010-04-05 2 views
2

J'écris une application dans laquelle j'ai un BorderLayout pour toute la page. Dans la partie sud, j'ai un panneau auquel j'ajoute FormPanels. Je voudrais être en mesure de faire défiler ce panneau afin que je puisse faire défiler les FormPanels.ExtJS: FormPanels verticaux d'Autoscroll ajoutés au panneau

Jusqu'à présent, rien de ce que j'ai trouvé à partir des recherches n'a aidé. Je ne comprends pas très bien ce que ExtJS nécessite en termes de combinaison de LayoutManagers, de réglage de la taille et de réglage de AutoScroll.

Tous les conseils partiels seront suivis avec reconnaissance.

Un extrait de code:

new Ext.Viewport({ 
    layout: "border", 
    items: [{ 
     region: "north", 
     contentEl: "title", 
     height: 50 
    }, { 
     region: "center", 
     id: "mappanel", 
     title: "Map", 
     xtype: "gx_mappanel", 
     map: map, 
     layers: [layer], 
     extent: extent, 
     split: true, 
     tbar: toolbarItems 
    }, { 
     region: "east", 
     title: "Details", 
     width: 300, 
     split: true, 
     id: "east-panel", 
     laout: 'fit' 
    }, { 
    region: "south", 
    id: "south-panel", 
    height: 200 
    }, { 
    region: "west", 
    id: "west-panel", 
    width: 300 
    }] 
}); 

matchedTrailJunctionsPanel = new Ext.Panel({ 
     title: "Matched Trail Junctions2", 
     id: "matched-trail-junctions", 
     autoScroll:true 
     //layout: 'anchor' 
    }); 

var southPanel = Ext.getCmp('south-panel'); 

southPanel.add(matchedTrailJunctionsPanel); 
southPanel.doLayout(); 

createTrailJunctionPanel = function(trailJunction) { 
var trailJunctionPanel = new Ext.form.FormPanel({ 
    labelWidth: 75, 
    width: 350, 
    defaultType: 'textfield', 
    items: [{ 
      fieldLabel: 'Junction Name', 
      name: 'junction-name' 
     }], 
    autoScroll:true, 
    //anchor: '100% 100%', 
    height: 100 
}); 
matchedTrailJunctionsPanel.add(trailJunctionPanel); 
if(trailJunction.publicTrailSegments.length == 0) { 
    matchedTrailJunctionsPanel.add(new Ext.form.Label({text: 'No public trails matched'}));  
} else { 
    var grid = new Ext.grid.GridPanel({ 
     store: mapMatchObjectStore, 
     columns: [ 
      {id:'publicTrailSegment',header: 'Trail', width: 160, sortable: true, dataIndex: 'publicTrailSegment'} 
     ], 
     stripeRows: true, 
     autoExpandColumn: 'publicTrailSegment', 
     height: 350, 
     width: 600, 
     title: 'Matched Trail Junctions'  
    }); 
    matchedTrailJunctionsPanel.add(grid); 
} 
matchedTrailJunctionsPanel.doLayout(); 
} 
+0

Si matchedTrailJunctionsPanel fait partie d'une disposition de bordure, il doit avoir une valeur de région définie. Une disposition de bordure doit également avoir une région «centre». Pouvez-vous poster le code entier? –

+0

J'ai inclus plus de code que demandé. J'ai trouvé que la définition de la hauteur sur le panneau contenant, matchedTrailJunctionsPanel, affiche la barre de défilement. Cependant, y compris le GridPanel confond les choses et le GridPanel cache les panneaux suivants. – Sarge

Répondre

2

Votre panneau sud est le conteneur principal pour vos composants, il devrait donc être autoScroll:true et vous devriez être en ajoutant à la fois votre forme et de la grille en elle. Vous ne pouvez pas vraiment ajouter une grille dans un FormPanel directement car ce n'est pas un champ de formulaire (vous devez l'encadrer comme un champ ou implémenter une partie de l'interface de Field). Il peut fonctionner avec le sud n'ayant aucune disposition (le navigateur devrait juste coller la grille directement après le formulaire) mais généralement il vaut mieux spécifier une disposition appropriée (vbox serait une bonne dans ce cas).

+0

Modifier le southPanel en autoScroll (et en changeant ensuite les objets contenus en autoHeight: true) fonctionne. Le problème de grille était que le tableau sous-jacent était partagé avec un autre magasin. Merci pour les conseils sur les grilles sur FormPanels. – Sarge

+0

Si ma réponse vous a aidé, vous devriez envisager de l'accepter. Merci! –

+0

dans ExtJS 4.0 autoHeight est uniquement applicable sur le conteneur, l'ajout de autoHeight aux sous-composants ajoutés n'a donc aucun effet, dans la mesure où j'ai lu la documentation. Corrigez-moi si j'ai tort, s'il-vous plait – Chris

1

Le panneau contenant doit avoir le réglage de hauteur. Les panneaux contenus doivent avoir l'ensemble de hauteur ou autoHeight: true ensemble.