2010-01-21 3 views
28

(Ce n'est pas une question en soi, je documente une solution que j'ai trouvée en utilisant Ext JS 3.1.0 Mais n'hésitez pas à répondre si vous connaissez une meilleure solution!)Cellules de grille Word-wrap dans Ext JS

la configuration de la colonne pour un objet grille Ext JS n'a pas de manière native pour permettre le texte de reformaté, mais il y a une propriété css pour remplacer le CSS en ligne des TD éléments créés par la grille.

Malheureusement, les TD éléments contiennent un élément DIV enveloppant le contenu, et que DIV est réglé sur white-space:nowrap par feuille de style Ext JS, remplaçant ainsi le TD CSS ne sert à rien.

j'ajouté ce qui suit à mon fichier CSS, une solution simple qui semble pour ne pas casser toutes les fonctionnalités de la grille, mais permet tout réglage white-space je demande à la TD de passer à travers la DIV.

.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, mais ça marche pour moi, voulait le faire là-bas comme une solution car je ne pouvais pas trouver une solution de travail en recherchant le Interwebs.

+0

Surcharger le CSS pour des choses comme ceci est la bonne approche. Ext ne peut pas fournir de configuration JS pour tous les styles possibles. Tout CSS non structurel peut généralement être remplacé sans problème (c'est la base entière de la création de thèmes personnalisés). –

+0

si vous vous cachez en même temps (en utilisant 4.1), vous pouvez garder ce problème à l'esprit: http://stackoverflow.com/q/12375769/640030 – Andrea

Répondre

18

Pas une "meilleure solution", mais une similaire. J'ai récemment dû autoriser toutes les cellules dans chaque grille pour envelopper. J'ai utilisé une solution à base de CSS similaire (ce qui était pour Ext JS 2.2.1):

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

Je ne l'ai pas pris la peine avec la fixation d'un style sur le td, je suis allé à droite pour la classe cellulaire.

+2

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

+0

Qu'en est-il des colonnes de nombres? Cela fonctionne correctement pour les colonnes de texte ordinaires, mais pas pour les colonnes numériques. – Razgriz

73

Si vous souhaitez uniquement appliquer l'habillage à une colonne, vous pouvez ajouter un rendu personnalisé.

Voici la fonction d'ajouter:

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

Ensuite, ajoutez la renderer: columnWrap à chaque colonne que vous voulez envelopper

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

C'est une excellente solution ... mais que faire si vous avez besoin d'éditer la cellule? TextField et TextArea semblent prendre différentes quantités de la cellule, mais pas la bonne quantité. – Sofox

+0

Cela fonctionne bien dans Mozilla mais pas dans IE8. Y a-t-il une solution pour IE8? – Freakyuser

+0

Merci, fonctionne parfaitement.Tester Over Extjs 4.2 dans Chrome, Mozilla et Edge, fonctionne dans chacun d'eux. – SensacionRC

13

Si vous voulez seulement envelopper le texte dans certaines colonnes et utilisez ExtJS 4, vous pouvez spécifier une classe CSS pour les cellules dans une colonne:

{ 
    text: 'My Column', 
    dataIndex: 'data', 
    tdCls: 'wrap' 
} 

Et dans y notre fichier CSS:

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

Je pense que ces tweaks de style css comme suggéré dans de nombreux autres threads ne fonctionneront pas parce que le style css en ligne aurait la priorité sur eux –

+0

Ajouter! Important va surcharger les styles en ligne si nécessaire. – CTarczon

+0

J'ai essayé cela mais cela ne fonctionne pas pour IE8 Extjs4. Toute autre solution de contournement? – Freakyuser

4

Autre solution est que:

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

Essayé cela mais cela ne fonctionne pas pour IE8 'Extjs4'. Toute autre solution de contournement? – Freakyuser

1

La meilleure façon de le faire est en définissant la cellWrap true comme ci-dessous.

cellWrap: true

Son travail bien ExtJS 5.0.

1

utilisation

cellWrap: true 

Si vous voulez continuer à utiliser toujours essayer de css travailler avec les ui, les variables, etc., dans des thèmes, ou définir le style avec la propriété de style.

+0

Fonctionne uniquement dans ExtJS 5+ –