2011-09-01 19 views
25

Las rejillas en ExtJS 4 (Sencha) no permiten seleccionar el contenido de manera predeterminada. Pero quiero hacer esto posible.Selección del contenido de la cuadrícula ExtJS 4

He probado este config cuadrícula:

viewConfig: { 
    disableSelection: true, 
    stripeRows: false, 
    getRowClass: function(record, rowIndex, rowParams, store){ 
     return "x-selectable"; 
    } 
}, 

con estas clases CSS (dirigida fundamentalmente a todos los elementos que puedo ver en Chrome):

/* allow grid text selection in Firefox and WebKit based browsers */ 

.x-selectable, 
.x-selectable * { 
       -moz-user-select: text !important; 
       -khtml-user-select: text !important; 
    -webkit-user-select: text !important; 
} 

.x-grid-row td, 
.x-grid-summary-row td, 
.x-grid-cell-text, 
.x-grid-hd-text, 
.x-grid-hd, 
.x-grid-row, 

.x-grid-row, 
.x-grid-cell, 
.x-unselectable 
{ 
    -moz-user-select: text !important; 
    -khtml-user-select: text !important; 
    -webkit-user-select: text !important; 
} 

Sé que puede anular la rejilla plantilla fila de 3 Ext como abajo, pero no sé cómo hacer lo mismo en Ext 4:

templates: { 
    cell: new Ext.Template(
    '<td class="x-grid3-col x-grid3-cell x-grid3-td-{id} x-selectable {css}" style="{style}" tabIndex="0" {cellAttr}>', 
      '<div class="x-grid3-cell-inner x-grid3-col-{id}" {attr}>{value}</div>', 
    '</td>' 
    ) 
} 

cualquier SU gagestions muy apreciadas.

Respuesta

4

Puede añadirlo como esta, utilizando procesador para la columna

columns: [ 
    { 
     header: "", 
     dataIndex: "id", 
     renderer: function (value, metaData, record, rowIndex, colIndex, store) { 
      return this.self.tpl.applyTemplate(record.data); 
     }, 
     flex: 1 
    } 
], 
statics: { 
    tpl: new Ext.XTemplate(
     '<td class="x-grid3-col x-grid3-cell x-grid3-td-{id} x-selectable {css}" style="{style}" tabIndex="0" {cellAttr}>', 
      '<div class="x-grid3-cell-inner x-grid3-col-{id}" {attr}>{value}</div>', 
     '</td>') 
} 
+0

impresionante, gracias. Sospecho, sin embargo, que esta es una indicación de que estoy tratando de usar una grilla para algo para lo que no está destinado: estaba usando una grilla puramente para fines de visualización y sin utilizar ninguna de sus funciones de edición. Terminé simplemente usando un panel con una plantilla X que daba una tabla de plano a centro. – keeny

+0

@keeny Sé que esto es muy viejo, pero a menudo uso cuadrículas para mostrar solo la funcionalidad. Son geniales para la clasificación y el estilo – WattsInABox

0

Una forma alternativa de hacerlo podría ser la de asignar las clases a los elementos HTML arbitrario durante el uso de la nueva templatecolumn. Aquí hay una sola columna en la definición de una columna que acabo de escribir mientras transfiero una aplicación a extjs4.

{ 
    text: "Notes", 
    dataIndex: 'notes', 
    width: 300,  
    xtype: 'templatecolumn', 
    tpl: [ 
    '&lt;span class="x-grid3-col x-grid3-cell x-grid3-td-{id} x-selectable {css}"', 
    'style="{style}" tabIndex="0" {cellAttr}&gt;', 
    '&lt;span class="x-grid3-cell-inner x-grid3-col-{id}" {attr}&gt;{notes}', 
    '&lt;/span&gt;&lt;/span&gt;' ], 
    editor: {xtype:'textfield'} 
} 
50

Puedes añadir enableTextSelection: fiel a su viewConfig o aplicar el cambio a nivel mundial para cada cuadrícula con esto:

Ext.override(Ext.grid.View, { enableTextSelection: true }); 
+0

Creo que "enableTextSelection" solo está disponible desde 4.1.0.Realmente no sé si es el caso, pero si es así, este es el camino a seguir. –

1

yo sólo quisiera añadir a triquis respuesta: Con ExtJS 4.1.0 puede habilitar la selección para treepanels así:

Ext.override(Ext.view.Table, { enableTextSelection: true }); // Treepanels 

Ext.override(Ext.grid.View, { enableTextSelection: true }); // Grids 

Coloque este código en algún lugar al principio de su función Ext.onReady() o al principio de su aplicación.

(Lo siento, no soy capaz de colocar un comentario a la respuesta del triqui, ya que no tienen la reputación necesaria todavía.)

0

Para versión anterior de ExtJs que doesnot apoyo permiten la selección de texto. A continuación, se trabajará asignando una nueva plantilla a la celda de la grilla. Esto funciona para ExtJs 3.4.0

var grid = new Ext.grid.GridPanel({ 
    viewConfig: { 
     templates: { 
     cell: new Ext.Template(
      '<td class="x-grid3-col x-grid3-cell x-grid3-td-{id}\ 
         x-selectable {css}" style="{style}"\ 
         tabIndex="0" {cellAttr}>',\ 
      '<div class="x-grid3-cell-inner x-grid3-col-{id}"\ 
         {attr}>{value}</div>',\ 
      '</td>' 
     ) 
     } 
    }, 
}); 
17

la combinación de varias de estas respuestas de la manera más EXTY .... Grupo enableTextSelection a cierto punto de vista de la creación de la red cuando la red.

var grid = new Ext.grid.GridPanel({ 
    viewConfig: { 
     enableTextSelection: true 
    }, 
}); 
0

puede permitir la selección de la vista de cuadrícula con esas pocas líneas de código, funciona muy bien en ExtJs 3.4, con el IE 11 y el modo de compatibilidad

if (!Ext.grid.GridView.prototype.templates) { 
Ext.grid.GridView.prototype.templates = {}; 
} 
Ext.grid.GridView.prototype.templates.cell = new Ext.Template(
'<td class="x-grid3-col x-grid3-cell x-grid3-td-{id} x-selectable {css}" style="{style}" tabIndex="0" {cellAttr}>', 
'<div class="x-grid3-cell-inner x-grid3-col-{id}" {attr}>{value}</div>', 
'</td>' 
); 
Cuestiones relacionadas