jqgrid viewGridRow () не обновляет все поля при изменении строки - PullRequest
0 голосов
/ 04 января 2012

Я инициализирую сетку следующим образом:

$("#mainGrid").jqGrid({
    url : g_MainGridUrl,
    datatype : 'json',
    height : 460,
    autowidth : true,
    colNames : g_ColNames,
    colModel : g_ColModel,
    pager : '#pager',
    rowNum : 100,
    rowList : [100, 200, 300],
    sortname : g_DefaultSort,
    sortorder : 'desc',
    sortable: true,
    viewrecords : true,
    caption : 'Results',
    hidegrid : false,
    rownumbers : true,          
    jsonReader : {
        root : "ROWS",
        page : "PAGE",
        total : "TOTAL",
        records : "RECORDS",
        cell : "",
        id : g_DefaultSort
    },
    loadComplete: function(){
        var num_records = $('#mainGrid').getGridParam('records');
        $('#gview_mainGrid div.ui-jqgrid-titlebar span').html('Results: '+num_records);
    },
    loadBeforeSend : function(thisXhr) {
        xhr = thisXhr;
    },
    ondblClickRow: function(rowid) {
        jQuery(this).jqGrid('viewGridRow', rowid, { width: "500"});
    }
});

$("#mainGrid").jqGrid('navGrid', '#pager', {
    del : false,
    add : false,
    edit : false,
    refresh:false,
    search: false,
    view: true
});

$("#mainGrid").jqGrid('navButtonAdd','#pager',{
    caption: "Columns",
    title: "Reorder Columns",
    onClickButton : function (){
        $("#mainGrid").jqGrid("columnChooser", {
            done: function() {
                resize_the_grid();
            },
            height: 320
        });
    }
});

и вызываю сетку следующим образом, после создания фильтра Объект:

$('#mainGrid').setGridParam({
        url : g_MainGridUrl + Ext.util.JSON.encode(filter)
    });
$('#mainGrid').trigger("reloadGrid");   

Как субъект заявляет, когда ядважды щелкните строку, чтобы просмотреть ее запись, а затем измените строки в модальном диалоговом окне, обновляются не все столбцы - некоторые делают, но не другие.Я подумал, что это может быть из-за того, что у меня не определено

для таблицы, поэтому я попытался добавить их.Я скачал самую последнюю версию (4.2.0).Там не отображаются ошибки.Это верно в IE8, Chrome, Safari.Есть идеи?

ОБНОВЛЕНИЕ: Я думаю, что нашел причину, но до сих пор нет решения.Кажется, что любой столбец с заголовком с пробелом в имени не может правильно прочитать сетку.Я подтвердил, добавив подчеркивания для замены пробелов в заголовках, и обнаружил, что для каждого исправленного столбца его значения начали обновляться.Я подаю отчет об ошибке в Trirand.

ОБНОВЛЕНИЕ 2: Кажется, уже подан отчет об ошибке: trirand forum - однако автор не считает это ошибкой,скорее разработчики не будут использовать заголовки столбцов с пробелами, поскольку jqgrid создает идентификаторы на основе имен в модели столбцов.Я просил изменить это поведение, но ожидаю, что мне придется покопаться в его коде, чтобы заставить его работать.

1 Ответ

0 голосов
/ 10 января 2012

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

nm = nm.replace(' ', '_');

в двух местах; первая между этими двумя строками в функции createData ():

nm = this.name;
setme = false;

секунда, между этими двумя строками в функции fillData ():

nm = obj.p.colModel[i].name;
// hidden fields are included in the form

Теперь все идентификаторы созданы с подчеркиванием вместо пробелов, и все хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...