jqGrid - встроенная логика редактирования в ответе JSON - PullRequest
1 голос
/ 11 ноября 2011

Возможно ли встроенное редактирование в ответе JSON необработанных данных?

Таким образом, вместо "editable:true" в столбце Model, мы могли бы иметь "editable":"true" в JSON, и он работал бы так же.

Что я хочу сделать -

Когда я нажимаю на строку, я могу встроенным редактировать эту строку. И свойство «редактируемые» вообще не задается в модели столбцов, но идет через JSON. Столбцы не должны редактироваться при загрузке, это только событие щелчка, которое запускает встроенное редактирование.

У меня есть следующее JSON

{
    "rows":[
        {
            "id":"1",
            "editable":"true",
            "cell":[                
                "Column 1 Data",
                "Column 2 Data"

            ]
        },
        {
            "id":"2",
            "editable":"false",
            "cell":[                
                "Column 1 Data",
                "Column 2 Data"

            ]
        }
]}

Как будут работать различные поля формы в этом случае - поле ввода, текстовое поле и поле выбора?

1 Ответ

3 голосов
/ 11 ноября 2011

Это интересный вопрос!Да, ты можешь это сделать.Внутри loadComplete обратного вызова у вас есть доступ к данным (ответ JSON, преобразованный в объект), который является параметром loadComplete.Вы можете опубликовать информацию о строках, которая должна быть установлена ​​в режиме встроенного редактирования непосредственно после загрузки данных.Например, это должны быть rowids и имена столбцов, которые можно редактировать.Вы можете использовать метод setColProp (см. здесь ) или getColProp (см. здесь ), чтобы изменить свойство editable для столбцов и вызвать метод editRow.Таким образом, вы можете полностью реализовать все, что вам нужно.

ОБНОВЛЕНО : В случае встроенного редактирования вы можете установить класс «not-editable-row» для любой строки, тогда jqGrid не будетпозволяет редактировать строку.Таким образом, внутри loadComplete(data) вы можете перечислять элементы массива data.rows и для каждого элемента, у которого свойство editable равно false, добавить в строку класс «not-editable-row».Код может быть примерно следующим:

$("#list").jqGrid({
    // ... here all your other jqGrid options
    loadComplete: function (data) {
        var item, i, l = data && data.rows ? data.rows.length : 0;
        for (i = 0; i < l; i++) {
            item = data.rows[i];
            if (item.editable === false) {
                $("#" + item.id).addClass("not-editable-row");
            }
        }
    }
});

ОБНОВЛЕНО 2 : Проблема очень проста.Либо вы должны изменить в приведенном выше коде if (item.editable === false) { на if (item.editable === "false") { или изменить "editable":"false" с данных JSON на "editable": false, что соответствует JSON-сериализации логических данных.

Как вы можете видеть из демоверсия подход к работе.

ОБНОВЛЕНО 3 .В более поздней версии jqGrid реализован rowattr.Сейчас гораздо эффективнее использовать rowattr.См. ответ для примера кода.

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