Как получить данные из строки, которая была дважды нажата в сетке ExtJS? - PullRequest
3 голосов
/ 08 декабря 2010

В сетке ExtJS я могу получить индекс выбранного элемента данных следующим образом:

grid.getSelectionModel().on('rowselect', function(sm, index, rec){
    changeMenuItemInfoArea(menuItemApplication, 'you are on row with index ' + index);
    var row_number_parts = rec.id.split('-'); // rec.id = e.g. "ext-record-1"
    var selected_index = row_number_parts[2] - 1;
    alert(selected_index);
});

Но как получить индекс выбранного элемента данных при двойном щелчке?

Когда я делаю это:

listeners: {
    'rowdblclick': function(grid, rowindex, e){
        console.log(...);
    }
}

и grid, и e, по-видимому, не обладают необходимой мне информацией, а rowindex бесполезен, поскольку, если пользователь перебирает столбец, то индекс строки, по которой дважды щелкнули, не обязательно индекс набора данных, который загрузил сетку.

Добавление

Благодаря @McStretch, я в конечном счете решил проблему, поместив id в список элементов, скрыв столбец идентификатора, а затем отправив идентификатор на страницу редактирования, например:

listeners: {
    'rowdblclick': function(grid, index, rec){
        var id = grid.getSelectionModel().getSelected().json[0];
        go_to_page('edit_item', 'id=' + id);
    }
}

Ответы [ 2 ]

9 голосов
/ 08 декабря 2010

Индекс фактически относится к индексу записи в магазине в соответствии с документацией для cellClick:

function(grid, rowIndex, columnIndex, e) {
    // Get the Record, this is the point at which rowIndex references a 
    // record's index in the grid's store.
    var record = grid.getStore().getAt(rowIndex);  

    // Get field name
    var fieldName = grid.getColumnModel().getDataIndex(columnIndex); 
    var data = record.get(fieldName);
}

Если это так, то вам не нужно беспокоиться о переупорядочении сетки. Я думаю, что вы должны получить индекс / запись, используя вышеописанную методологию в вашем 'rowdblclick' слушателе - это гораздо более читабельно Проверьте это и посмотрите, что получится.

0 голосов
/ 08 декабря 2010

Я нашел способ сделать это:

listeners: {
    'rowdblclick': function(grid, index, rec){
        var row_label = grid.getSelectionModel().getSelected().id;
        var row_label_parts = row_label.split('-');
        var selected_index = row_label_parts[2] - 1;
        alert(selected_index);
    }
}
...