Настраиваемое пост-действие jQGrid - PullRequest
6 голосов
/ 08 июля 2011

У меня есть отличный пример встроенного редактирования с jQGrid http://ok -soft-gmbh.com / jqGrid / TestSamle / Admin.htm Существует два пользовательских действия Edit и Delete.

Я хочу добавить еще одно собственное встроенное действие, назовем его ToggleOnline.В этом действии я хочу опубликовать все ячейки сетки на контроллере.По сути, это будет своего рода действие редактирования, но для некоторых столбцов будут установлены некоторые значения по умолчанию.

Встроенные кнопки были добавлены следующим образом:

{ name: 'act', index: 'act', width: 55, align: 'center', sortable: false, formatter: 'actions',
                        formatoptions: {
                            keys: true, // we want use [Enter] key to save the row and [Esc] to cancel editing.
                            delOptions: myDelOptions
                        }
                    }

, чем для добавления пользовательской дополнительной кнопки i.использовало событие loadComplete:

loadComplete: function(){ 
            debugger;
            var ids = jQuery("#Grid1").getDataIDs(); 
                for(var i=0;i<ids.length;i++){ 
                    var cl = ids[i];
                    custom = "<input style='height:22px;width:20px;' type='button' value='E' onclick=jQuery('#Grid1').editRow(" + cl + "); />";
                    jQuery("#Grid1").setRowData(ids[i], { act: custom }) 
                } 
            } 

, но пользовательская кнопка вообще не появляется.А также мне нужно как-то опубликовать данные строки, а также мне нужно указать имя настраиваемого действия (oper) для обработки этого действия на сервере.

1 Ответ

9 голосов
/ 08 июля 2011

Я обновил демо для вас.Теперь http://ok -soft-gmbh.com / jqGrid / TestSamle / Admin1.htm делает то, что вам нужно.(Я удалил из кода вторую сетку, чтобы уменьшить размер кода):

enter image description here

Некоторые комментарии к реализации.Модуль форматирования действий добавляет элементы «кнопки действий» внутри элемента div.Каждая «кнопка действия» имеет HTML-разметку, подобную следующей

<div style="margin-left: 5px; float: left;"
     class="ui-pg-div ui-inline-del"
     onmouseover="jQuery(this).addClass('ui-state-hover');"
     title="Delete selected row"
     onmouseout="jQuery(this).removeClass('ui-state-hover');"
     onclick="$.fn.fmatter.rowactions('10','List1','del',0);">
    <span class="ui-icon ui-icon-trash"></span>
</div>

Поэтому, чтобы внешний вид пользовательской кнопки был близок к оригинальным «кнопкам действия», я делаю внутри loadComplete следующее:

loadComplete: function () {
    var grid = $(this),
        iCol = getColumnIndexByName(grid,'act'); // 'act' - name of the actions column
    grid.children("tbody")
        .children("tr.jqgrow")
        .children("td:nth-child("+(iCol+1)+")")
        .each(function() {
            $("<div>",
                {
                    title: "Custom",
                    mouseover: function() {
                        $(this).addClass('ui-state-hover');
                    },
                    mouseout: function() {
                        $(this).removeClass('ui-state-hover');
                    },
                    click: function(e) {
                        alert("'Custom' button is clicked in the rowis="+
                              $(e.target).closest("tr.jqgrow").attr("id") +" !");
                    }
                }
              ).css({"margin-left": "5px", float:"left"})
               .addClass("ui-pg-div ui-inline-custom")
               .append('<span class="ui-icon ui-icon-document"></span>')
               .appendTo($(this).children("div"));
    });
}

где

var getColumnIndexByName = function(grid,columnName) {
        var cm = grid.jqGrid('getGridParam','colModel'), i=0,l=cm.length;
        for (; i<l; i+=1) {
            if (cm[i].name===columnName) {
                return i; // return the index
            }
        }
        return -1;
    };

Вы можете изменить значок пользовательской кнопки с 'ui-icon-document' и изменить код дескриптора события click, что вам нужно, я показалкак вы можете получить Ridid.Используя его, вы можете использовать метод getRowData, чтобы получить содержимое других ячеек строки.

ОБНОВЛЕНО: Текущая версия free jqGrid поддерживает простой способ реализациипользовательские кнопки.См. демо .

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