2011-09-01 34 views
25

Siatki w ExtJS 4 (Sencha) nie pozwalają domyślnie wybierać zawartości. Ale chcę to umożliwić.Tworzenie zawartości siatki ExtJS 4 do wyboru

Próbowałem tej siatki config:

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

z tych klas css (w zasadzie każdy element kierowania widzę w 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; 
} 

wiem, że można zastąpić siatkę szablon wiersza w Ext 3 jak poniżej, ale nie wiem jak zrobić to samo w 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>' 
    ) 
} 

Dowolny su Gesty są bardzo cenne.

Odpowiedz

4

Można dodać go w ten sposób, przy użyciu mechanizmu renderującego dla kolumny

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

super, dzięki. Podejrzewam jednak, że jest to wskazówka, że ​​próbuję użyć siatki dla czegoś, do czego nie jest przeznaczona - korzystałem z siatki wyłącznie w celach wyświetlania i nie używałem żadnej z jej funkcji edycyjnych. Skończyłem właśnie przy użyciu panelu z XTemplate, który wyrenderował tabelę samolot-jane. – keeny

+0

@keeny Wiem, że to jest naprawdę stare, ale często używam siatki do wyświetlania tylko funkcji. Są świetne do sortowania i stylu. – WattsInABox

0

Alternatywnym sposobem na to może być przypisanie klas do dowolnych elementów HTML podczas korzystania z nowego templatecolumn. Oto pojedyncza kolumna w definicji kolumny, którą właśnie napisałem podczas przenoszenia aplikacji do 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

Możesz dodać enableTextSelection: true do viewConfig lub zastosować zmianę globalnie dla każdej sieci z tym:

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

Uważam, że "enableTextSelection" jest dostępne tylko od wersji 4.1.0.Naprawdę nie wiem, czy tak jest, ale jeśli tak, to jest to droga. –

1

Właśnie chciałbym dodać do Triquis odpowiedź: Z ExtJS 4.1.0 można włączyć wybór dla treepanels także:

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

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

Umieść ten kod gdzieś na początku swojej funkcji Ext.onReady() lub na początku swojej aplikacji.

(Niestety, nie jestem w stanie skomentować do odpowiedzią Triqui jak nie mam jeszcze wymaganej reputacji.)

0

Dla starszej wersji ExtJS że doesnot wsparcie umożliwiające zaznaczenie tekstu. Poniższe działania będą działać poprzez przypisanie nowego szablonu do komórki siatki. Działa to na 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

łącząc kilka z tych odpowiedzi w sposób najbardziej Exty .... Ustaw enableTextSelection true zdaniem Grid podczas tworzenia siatki.

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

można włączyć wybór dla widoku siatki z tych kilku linijek kodu, działa bardzo dobrze w ExtJS 3.4, IE 11 i trybie zgodności

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>' 
); 
Powiązane problemy