Доступ к данным при selType: 'cellmodel'/'rowmodel'
Доброго времени суток.
Когда в гриде задано selType: 'rowmodel', т.е. тип выделения контента по умолчанию - доступ к данным для дальнейшей обработки можно получить следующим образом: sm = gridUsers.getSelectionModel(); sel = sm.getSelection(); MyData = sel[0].get('my_data');Так было в примере. Однако, в моем случае необходимо задать выделение по ячейкам: selType: 'cellmodel'Вопрос в следующем: как в данном случае реализовать доступ к данным, т.е., непосредственно, получить значение редактируемой ячейки, идентификаторы строки и столбца, на пересечении которых находится ячейка? |
Вся нужная информация предоставлена в событии.
1й способ) select у грид это по сути событие select в rowmodel, если в качестве модели указать cellmodel, то будет срабатывать select от cell Model Ext.define('app.view.infogrid' ,{ extend: 'Ext.grid.Panel', selType: 'cellmodel', //.... listeners:{ select : { fn: function(CellModel,record,rowIndex, colIndex,eOpts ) { // теперь мы знаем в каком столбце и в какой строке, а ещё у нас есть cellMode и record console.log("record=",record); // вся строка console.log("rowIndex=",rowIndex); //номер строки console.log("colIndex=",colIndex); //номер столбца console.log(record.fields.items[colIndex].name); // имя столбца console.log(record.get(record.fields.items[colIndex].name)); // значение ячейки // record.get(record.fields.items[colIndex].name) - работает, но жаль что более красивого способа ненашёл (( } } } }); 2й способ) создадим свою выбиралку // создадим cell model ответственный за выделение var cellmodel = new Ext.selection.CellModel({ mode: 'SINGLE', listeners: { // эта функция сработает при выборе ячейки select : { fn: function(CellModel,record, rowIndex, colIndex,eOpts ) { // теперь мы знаем в каком столбце и в какой строке, а ещё у нас есть cellMode и record console.log(rowIndex,colIndex); } } } }); // создадим таблицу var grid = new Ext.grid.Panel({ store: store, selModel: cellmodel, //указываем selModel, selType судя по всему это просто доступ по alias ...... }) 3й) есть специальный метод ответственный за возврат позиции (правда я его применить не смог, нефурычит нефига) sm = gridUsers.getSelectionModel(); console.log(sm.getCurrentPosition()); |
Спасибо за оперативный и подробный ответ, завтра днем попробую прикрутить это в проект.
|
Воспользовался вторым способом, все работает. Поставленную задачу смог наконец-таки решить.
Кстати, третий способ у меня заработал когда данные команды я разместил следующим образом (внутри плагина): var cellEditing = Ext.create('Ext.grid.plugin.CellEditing', { clicksToEdit: 2, listeners: { edit: function(){ sm = gridUsers.getSelectionModel(); console.log(sm.getCurrentPosition()); //... } } }); |
И еще вопрос. Чем принципиально различается следующий код:
var cellmodel = new Ext.selection.CellModel({ listeners: { select : { fn: function(CellModel,record, rowIndex, colIndex,eOpts ) { ... } } } });и var cellmodel = new Ext.selection.CellModel({ listeners: { select : function(CellModel,record, rowIndex, colIndex,eOpts ) { ... } } }); , т.е. чем является "fn:" и на что влияет? |
Особой разницы нет, просто такая форма записи записи даёт пару дополнительных плюшек.
listeners: { click : { scope:youThis, //обьект в контексте которого будет вызван обработчик element: 'body', // указываем что конкретно слушать fn: function( ) { ... }, } } |
Часовой пояс GMT +3, время: 12:03. |