2010-01-21 9 views
28

(Dies ist keine Frage per se, ich dokumentiere eine Lösung, die ich mit Ext JS 3.1.0 gefunden habe. Aber bitte antworten Sie, wenn Sie eine bessere Lösung kennen!)Zeilen mit Zeilenumbruch in Ext JS

die Spalte Config für ein Objekt Ext JS Grid hat keine native Möglichkeit Wort umwickelten Text zu ermöglichen, aber es gibt eine css Eigenschaft, um die Inline-CSS der TD Elemente durch das Raster erstellt außer Kraft zu setzen.

Leider enthalten die TD Elemente ein DIV Element den Inhalt Einwickeln, und dass DIV auf white-space:nowrap von Ext JS Sheet gesetzt, so dass die TD CSS überschreibt nicht gut ist.

Ich habe folgendes mein Haupt-CSS-Datei, eine einfache Lösung, dass jede Raster-Funktionalität nicht brechen erscheint, sondern ermöglicht es jedem white-space Einstellung I des TD gelten für die DIV passieren.

.x-grid3-cell { 
    /* TD is defaulted to word-wrap. Turn it off so 
     it can be turned on for specific columns. */ 
    white-space:nowrap; 
    } 

.x-grid3-cell-inner { 
    /* Inherit DIV's white-space from TD parent, since 
     DIV's inline style is not accessible in the column 
     definition. */ 
    white-space:inherit; 
    } 

YMMV, aber es funktioniert für mich, wollte sie sich als eine Lösung, um aus, da ich nicht eine funktionierende Lösung durch Durchsuchen des Interwebs finden konnte.

+0

Das Überschreiben der CSS für solche Dinge ist der richtige Ansatz. Ext kann möglicherweise keine JS-Konfigurationen für jeden möglichen Stil bereitstellen, der erforderlich sein könnte. Jegliches CSS, das nicht strukturell ist, kann im Allgemeinen ohne Probleme überschrieben werden (das ist die gesamte Grundlage für die Erstellung von benutzerdefinierten Designs). –

+0

Wenn Sie sich gleichzeitig verstecken (mit 4.1), sollten Sie dieses Problem im Hinterkopf behalten: http://StackOverflow.com/q/12375769/640030 – Andrea

Antwort

18

Keine "bessere Lösung", aber eine ähnliche. Ich musste vor kurzem zulassen, dass ALLE Zellen in jedem Raster umschlossen wurden. Ich habe einen ähnlichen CSS-basierten Update (dies ist für Ext JS war 2.2.1):

.x-grid3-cell-inner, .x-grid3-hd-inner { 
    white-space: normal; /* changed from nowrap */ 
} 

ich nicht mit der Einstellung einen Stil auf dem td störte, ging ich gerade richtig für die Zellklasse.

+2

Auf extjs 4: ".x-grid-cell -inner { white-space: normal; } " – digz6666

+0

Wie wäre es mit Zahlenspalten? Dies funktioniert gut für gewöhnliche Textspalten, aber nicht für Zahlenspalten. – Razgriz

73

Wenn Sie den Wrapper nur auf eine Spalte anwenden möchten, können Sie einen benutzerdefinierten Renderer hinzufügen. Hier

ist die Funktion hinzuzufügen:

function columnWrap(val){ 
    return '<div style="white-space:normal !important;">'+ val +'</div>'; 
} 

Dann fügen Sie die renderer: columnWrap jeder Spalte Sie

new Ext.grid.GridPanel({ 
[...], 
columns:[{ 
    id: 'someID', 
    header: "someHeader", 
    dataIndex: 'someID', 
    hidden: false, 
    sortable: true, 
    renderer: columnWrap   
}] 
+0

Das ist eine großartige Lösung ... aber was, wenn Sie die Zelle bearbeiten müssen? TextField und TextArea scheinen unterschiedliche Mengen der Zelle aufzunehmen, aber nicht die richtige Menge. – Sofox

+0

Das funktioniert gut in Mozilla, aber nicht in IE8. Gibt es eine Lösung für IE8? – Freakyuser

+0

Danke, funktioniert perfekt.Tester über Extjs 4.2 in Chrome, Mozilla und Edge, funktioniert in allen von ihnen. – SensacionRC

13

Wenn Sie nur Text wickeln in bestimmten Spalten wollen wickeln wollen und sind mit ExtJS 4, können Sie eine CSS-Klasse für die Zellen in einer Spalte angeben:

Und in y unsere CSS-Datei:

.wrap .x-grid-cell-inner { 
    white-space: normal; 
} 
+0

ich denke, dass diese CSS-Stil Tweaks, wie in vielen anderen Threads vorgeschlagen, nicht funktionieren, weil In-Line-CSS-Stil Priorität vor ihnen erhalten würde –

+0

Hinzufügen! Wichtig wird Inline-Stile bei Bedarf überschreiben. – CTarczon

+0

Versucht dies, aber dies funktioniert nicht für IE8 Extjs4. Eine andere Problemumgehung? – Freakyuser

4

Andere Lösung ist, dass:

columns : [ 
    { 
     header: 'Header', 
     dataIndex : 'text', 
     renderer: function(value, metaData, record, rowIndex, colIndex, view) { 
      metaData.style = "white-space: normal;"; 
      return value; 
     } 
    } 
] 
+0

Versucht dies, aber dies funktioniert nicht für IE8 'Extjs4'. Eine andere Problemumgehung? – Freakyuser

1

Der beste Weg, wie unten durch Setzen des cellWrap auf true zu tun ist.

cellWrap: true

Seine Arbeiten gut in EXTJS 5.0.

1

Verwendung

cellWrap: true 

Wenn Sie noch CSS verwenden, immer versuchen, mit ui an der Arbeit, Variablen, usw. innerhalb Themen oder den Stil mit der Stil-Eigenschaft festgelegt.

+0

Funktioniert nur in ExtJs 5+ –