Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.05.2012, 18:32
Новичок на форуме
Отправить личное сообщение для FatalisT Посмотреть профиль Найти все сообщения от FatalisT
 
Регистрация: 07.05.2012
Сообщений: 8

Доступ к данным при selType: 'cellmodel'/'rowmodel'
Доброго времени суток.
Когда в гриде задано
selType: 'rowmodel'
, т.е. тип выделения контента по умолчанию - доступ к данным для дальнейшей обработки можно получить следующим образом:
sm = gridUsers.getSelectionModel();
sel = sm.getSelection();
MyData = sel[0].get('my_data');
Так было в примере.
Однако, в моем случае необходимо задать выделение по ячейкам:
selType: 'cellmodel'
Вопрос в следующем: как в данном случае реализовать доступ к данным, т.е., непосредственно, получить значение редактируемой ячейки, идентификаторы строки и столбца, на пересечении которых находится ячейка?
Ответить с цитированием
  #2 (permalink)  
Старый 07.05.2012, 21:15
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Вся нужная информация предоставлена в событии.

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());
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 08.05.2012 в 00:07.
Ответить с цитированием
  #3 (permalink)  
Старый 07.05.2012, 23:40
Новичок на форуме
Отправить личное сообщение для FatalisT Посмотреть профиль Найти все сообщения от FatalisT
 
Регистрация: 07.05.2012
Сообщений: 8

Спасибо за оперативный и подробный ответ, завтра днем попробую прикрутить это в проект.
Ответить с цитированием
  #4 (permalink)  
Старый 08.05.2012, 03:24
Новичок на форуме
Отправить личное сообщение для FatalisT Посмотреть профиль Найти все сообщения от FatalisT
 
Регистрация: 07.05.2012
Сообщений: 8

Воспользовался вторым способом, все работает. Поставленную задачу смог наконец-таки решить.
Кстати, третий способ у меня заработал когда данные команды я разместил следующим образом (внутри плагина):
var cellEditing = Ext.create('Ext.grid.plugin.CellEditing', {
	clicksToEdit: 2,
	listeners: {
		edit: function(){
			sm = gridUsers.getSelectionModel();
			console.log(sm.getCurrentPosition());
			//...
		}
	}
});
Ответить с цитированием
  #5 (permalink)  
Старый 08.05.2012, 15:52
Новичок на форуме
Отправить личное сообщение для FatalisT Посмотреть профиль Найти все сообщения от FatalisT
 
Регистрация: 07.05.2012
Сообщений: 8

И еще вопрос. Чем принципиально различается следующий код:

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:" и на что влияет?
Ответить с цитированием
  #6 (permalink)  
Старый 08.05.2012, 23:08
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Особой разницы нет, просто такая форма записи записи даёт пару дополнительных плюшек.
listeners: {
          click : {
              scope:youThis, //обьект в контексте которого будет вызван обработчик
              element: 'body', // указываем что конкретно слушать
              fn: function( ) {     
                    ...
              },
          }
   }
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 08.05.2012 в 23:12.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема при воспроизведении аудио при использовании jplayer nemish Events/DOM/Window 0 01.12.2011 16:15
getAllResponseHeaders() и status имеют смысл только при readyState==4? mister_maxim AJAX и COMET 7 27.03.2011 19:08
Изменение стиля родительского элемента при :hover дочернего lanzs Элементы интерфейса 2 16.10.2010 13:28
доступ к данным iframe gooody Events/DOM/Window 2 26.01.2010 17:37