jqGrid: возможно ли выборочно сделать ячейки редактируемыми? - PullRequest
1 голос
/ 06 февраля 2012

как я могу сделать одну ячейку редактируемой из недоступного для редактирования столбца?
мой javaScript выглядит следующим образом:

$( '#grid' ).jqGrid({
    // ...
    cellEdit : true,
    colModel : [
        { name : "id", index : "id", editable : false },
        { name : "wbs", index : "wbs", editable : false },
        { name : "value", index : "value", editable : false }
    ],
    loadComplete : function(data) {
        // ... foreach ( cell in data.rows.columns ) ...
        if ( cell.shouldBeEditable ) {
            jQuery('#grid').setCell(cell.row, cell.col, '', 'green', { editable : true });
        }
    }
    // ...
}

поэтому, после того, как глобально установив столбцы как недоступные для редактирования, я пытаюсь установитьих можно редактировать локально, основываясь на некоторых критериях (чтобы их было легче идентифицировать, я также закрашиваю их зеленым).

Увы, это не работает: ячейки становятся зелеными, но когда я пытаюсь щелкнуть по ним, они не становятся редактируемыми.
Проверка выбранной ячейки с помощью firebug показывает, что класс edit-cell должен быть правильно применен.
Как последнее замечание, это работает, если я устанавливаю столбцы как редактируемые в первом случае.

Ответы [ 2 ]

1 голос
/ 13 февраля 2012

Я нашел хороший обходной путь для этой проблемы (спасибо Уолтеру за то, что я выбрал правильный путь).

Вместо того чтобы блокировать все ячейки и выборочно разблокировать их декларативным способом (что может привести к длительному времени загрузки), я объявляю все ячейки редактируемыми.
Затем я присоединяю функцию обратного вызова к опции afterEditCell:

var $grid = $('#grid');
$grid.jqGrid({
    // ...
    afterEditCell : function(rowid, cellname, value, iRow, iCol) {
        if ( shouldNotBeEditable(iRow, iCol) ) {
            $grid.setCell(rowid, cellname, '', 'not-editable-cell');
            $grid.restoreCell(iRow, iCol);
        }
    },
    // ...
});

Таким образом, ячейка немедленно сбрасывается до своего предыдущего значения, и я гарантирую, что обратный вызов вызывается только один раз для ячейки, которая не подлежит редактированию, поскольку ячейка превращается в not-editable-cell после первого вызова.

1 голос
/ 07 февраля 2012

Я предлагаю вам сделать это в обратном порядке.Сделайте столбец редактируемым, но отключите ячейки, которые вы не хотите редактировать.Это функция, которую я написал для отключения ячеек:

// cellName is the name defined in your colModel
function disableGridCell(cellName) {
    var cell = $('[name="' + cellName + '"]');
    cell.css('display', 'none');

    var div = $("<div>")
        .css('width', '100%')
        .css('height', '100%')
        .css('border', '1px solid #000')
        .css('background-color', '#CCC')
        .text('xxxxxxxxxxxx');

    cell.parent().append(div);
}

Я вызываю disableGridCell внутри моей onEditFunc функции editRow моей сетки:

$('#grid').jqGrid('editRow', id, keys, onEditFunc);

function onEditFunc(id) {
   if (condition to disable cell) {
      disableGridCell('CellName');
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...