2013-03-23 14 views
5

Mam Ext.panel.Panel, do którego chcę dynamicznie dodać inne "mniejsze" panele reprezentujące różne "rzeczy" w mojej aplikacji. Ten panel znajduje się na górze siatki i ma taką samą szerokość jak siatka. Kiedy "mniejszy" panel jest dynamicznie dodawany do tego "panelu kontenera", chcę, aby panele były dodawane poziomo, a następnie pionowo, jeżeli całkowita szerokość wszystkich "małych" paneli jest większa niż szerokość kontenera.ExtJS Layout, Horizonally następnie rosną pionowo

Próbowałem "dopasować", "hbox", "vbox", wszystko.

Czy brakuje mi typu układu?

+1

czy próbowałeś użyć układu "auto" i po prostu wstawiłeś 'display: inline-block' na zagnieżdżonych panelach? Czy spodziewasz się, że zewnętrzny panel rzeczywiście stanie się wyższy, czy też wystarcza, aby panele wewnętrzne przepłynęły przez panel poziomo, a następnie w dół? – wantok

+0

Zdecydowanie chciałbym, aby panel kontenerowy również się rozwinął. Spróbuję twojej sztuczki, żeby sprawdzić, czy to działa, dziękuję! –

Odpowiedz

4

To, o co prosisz, jest ogólnie znane jako układ flow, który ExtJS nie ma po wyjęciu z pudełka (jeśli mnie pytasz, jest to trochę głupie, ponieważ nie jest to bardzo powszechny układ i fakt, który zastosowano na większości ich przykładów danych, ale raczej za pomocą css niż układu).

Ale można to łatwo osiągnąć za pomocą układu kolumn bez zdefiniowanej wartości columnWidth. Kopiowanie this answer:

Ext.create('Ext.Panel', { 
     width: 500, 
     height: 280, 
     title: "ColumnLayout Panel", 
     layout: 'column', 
     renderTo: document.body, 
     items: [{ 
      xtype: 'panel', 
      title: 'First Inner Panel', 
      width: 250, 
      height: 90 
     },{ 
      xtype: 'panel', 
      title: 'Second Inner Panel', 
      width: 200, 
      height: 90 
     }, { 
      xtype: 'panel', 
      title: 'Third Inner Panel', 
      width: 150, 
      height: 90 
     }] 
    }); 

enter image description here

+0

Teraz, gdy wrócę do mojej pracy ... przyjrzę się temu ... dzięki! –

+0

To sprawia, że ​​jestem częścią drogi ... dodajemy rzeczy dynamicznie (nie podczas konfiguracji) ... czy przed dodaniem muszę znać wymiar szerokości? –

+0

Szerokość pojemnika lub przedmiotów? – Izhaki

5

I stwierdzono, że stosując powyższy przykład w ExtJS 4.2.2 Płyty ułożono w pozycji pionowej.

Musiałem dodać:

style: { 
    float: 'left' 
}, 

do każdego elementu, a następnie wszystko działa dobrze.

Przetestowałem zarówno z konfiguracją statyczną (jak powyższy przykład), jak iz dynamicznym dodawaniem/usuwaniem (przy użyciu niestandardowego kontenera dla każdego elementu potomnego). Panel kontenera jest ponownie renderowany za każdym razem w sposób przypominający przepływ. Popraw również przy zmianie rozmiaru okna przeglądarki - elementy potomne zostały przeniesione w celu dostosowania do nowego rozmiaru panelu.

Murray

+0

czy działa dla dynamicznych elementów tylko w 4.2.2? Próbowałem, ale to nie działa na 3.x – sidgate

+0

Działa dla wersji 4.2.2 w połączeniu z kolumną loyout – monstergold

+0

nie mogę ci wystarczająco podziękować :) – mcabral