2011-07-13 19 views
5

Wygląda na to, że powinno być tak proste, ale po prostu nie mogę tego zrobić (nie potrzebuję nawet tego robić dynamicznie). Na przykład załóżmy, że mam prosty 2 kolumna konfiguracja sieci tak:Jak zastosować kolor tła (lub niestandardową klasę css) do kolumny w siatce - ExtJs 4?

columns : [  
     {header: 'USER', dataIndex: 'firstName', width:70, cls: 'red'}, 
     {header: 'CATEGORY', dataIndex: 'category', width:100} 
    ] 

Atrybut cls: 'red' wpływa tylko nagłówek i nie rzeczywista kolumny. Widziałem gdzie indziej, że należy przy użyciu niestandardowego mechanizmu renderującego (być może), ale gdy próbuję coś takiego:

{header: 'USER', dataIndex: 'firstName', width:70, 
    renderer: function(value) { 
     this.addCls('red'); 
     return value; 
    } 
} 

I jeszcze dostać nudne białe tło. Widziałem również ludzi używających definicji funkcji renderera, jak: function(value, metadata, record, rowIndex, colIndex, store), ale kiedy użyłem alert() do przetestowania parametrów wejściowych, otrzymuję undefined dla wszystkiego z wyjątkiem value, co pozwala mi sądzić, że może to było ważne tylko dla wersji przed ExtJs 4.

Próbowałem również zwrócić coś w rodzaju '<span class="red">' + value + '</span>' w mojej funkcji renderowania, ale to tylko podświetliło tekst, a nie zmieniło całe tło kolumny.

Nie chcę przesłonić domyślnych klas Ext css, ponieważ chcę zastosować kolory tła do określonej siatki w aplikacji, a nie wszystkich z nich.

Ponadto wszystkie kolumny danej siatki mogą mieć różne kolory (zwróć uwagę, że w przykładzie dodałem tylko tę klasę do pierwszej kolumny).

Załóżmy, że red jest zdefiniowany jako .red {background:#FF0000;} w moim pliku css.

Odpowiedz

6

Dodaj atrybut tdCls do definicji nagłówka kolumny, z wartością klasy CSS, której chcesz użyć.

columns : [ 
    {header: 'USER', dataIndex: 'firstName', width:70, tdCls: 'red'}, 
    {header: 'CATEGORY', dataIndex: 'category', width:100} 
] 
+0

Działa to dobrze w przypadku ExtJS 4. – cjauvin

0

lepiej przeczytać: http://www.sencha.com/learn/grid-faq/

sekcja „Aby zmodyfikować komórek/wiersz/kolumna”

+0

Wygląda na to, i wygląda na to, że ten dokument nie jest ważny dla ExtJs 4. Na przykład próbowałem wykorzystać generowane automatycznie klasy: x-grid3-td- {columnID}, i to nie działało . (Próbowałem również rozsądnych odmian, takich jak: x-grid-td i x-grid4-td). Nadal będę się nad tym zastanawiać i opublikuję moje wnioski. – LittleTreeX

7

Choć siatki FAQ sugeruje atian25 nie stosuje się do ExtJS 4, udało mi użyć go, by poprowadzić mnie do właściwej odpowiedzi na moje pytanie.

W javascript dodać atrybut ID na swojej definicji kolumny:

{header: 'SomeHeader', id: 'myColumn' dataIndex: 'theData'} 

To będzie generować następujące klasy CSS dla wszystkich elementów td w tej kolumnie:

.x-grid-cell-myColumn 

W swojej css plik (który musi zostać załadowany po pliku Ext css) dodaj następującą definicję:

.x-grid-table .x-grid-cell-myColumn {background:#FF0000;} 

I bingo, masz jasne czerwone tło dla wspomnianej kolumny. Korzystając z tej samej techniki, możesz dostosować poszczególne kolumny w dowolny sposób.

UWAGA: bez użycia selektora .x-grid-table wygrywa specyfika klas "wierszy". Konieczne będzie również ponowne zdefiniowanie .x-grid-row-over, jeśli chcesz zachować efekt najechania na niestandardową kolumnę.

+0

jest to złe rozwiązanie dla czegoś, które można wielokrotnie użyć, ponieważ identyfikator jest unikatowy, nie można go użyć więcej niż jeden raz w tej samej sieci lub na przykład 2 siatki na tej samej stronie. @ GreenGiant's 'tdCls' odpowiedź jest lepszym rozwiązaniem –

+0

@ Jesson-button-event, może być dobrze. To było najlepsze rozwiązanie, jakie mogłem wymyślić w tym czasie. Jednak przestałem używać ExtJS wkrótce po tym, jak to opublikowałem i nie weryfikowałem ani nie próbowałem niczego innego. Niemniej jednak zaznaczę jego odpowiedź, ponieważ wydaje się bardziej odpowiednia. Dzięki za wskazanie tego. Nie jestem nawet pewien, czy jego metoda była prawidłowa lub możliwa w tym czasie. ExtJS4 był raczej nowy, a na pewno miał wiele dziwactw i błędów (był to powód, dla którego przestałem go używać). – LittleTreeX

0

Celem jest, aby zastosować jeden CLS do kolumny, co zrobiłem z getRowClass a następnie usunąć go po 1-2 sek. Websync przesyła nowe dane co 5 sekund, więc kiedy to się zmieni w komórce, powinno być jak miganie zmienionej kolumny (komórki), która powraca do "białej" (domyślnie) przed odświeżeniem danych? Wartość przypisana do porównania nowych rekordów wynosi 0, ale w rzeczywistości jest to ostatnia wartość, która jest porównywana!

Powiązane problemy