guriddo editable bootstrap agrupar jquery jqgrid

jquery - editable - jqgrid github



JQGrid Custom Formatter no funciona para la creación de botones (1)

Estoy usando el formateador de clientes de JQGrid para crear el botón pero no se muestra el botón.

function viewLineBtn(cellvalue, options, rowObject) { alert(cellvalue +","+options+","+rowObject); var rowid = options.rowid; var button = "<button class=/"viewLineItem/" id=" + rowid + ">View Line Item</button>" $(''#'' + rowid).die(); $(''#'' + rowid).live(''click'', function(rowId) { alert("hi"); alert(rowId); }); }

En el método de alerta, estoy indefinido para esos parámetros, excepto el rowObject. Lo que me estoy perdiendo?


En primer lugar, creo que existe un malentendido acerca de cómo jqGrid usa el formateador personalizado. jqGrid construye todo el cuerpo jqGrid ( <tbody> ) como una cadena . Por defecto jqGrid coloca los datos de la celda directamente en la celda, compre usando el formateador, puede colocar otra cadena como el contenido de las celdas de la columna (el contenido de los elementos <td> ). Por lo tanto, el formateador personalizado debe devolver la cadena . viewLineBtn función viewLineBtn actual devuelve undefined .

El próximo problema jqGrid llama al formateador personalizado para todas las filas de la página , construye <tbody> , insértela en la grilla y solo después de eso puede hacer que el enlace sea un evento de click .

Es suficiente para vincular el controlador de eventos de click en el elemento de la cuadrícula ( <table> ) y se llamará al controlador de eventos al hacer clic en cualquier elemento interno de la cuadrícula debido al burbujeo del evento . jqGrid registra ya un controlador de eventos de un click . Por lo tanto, puede usar beforeSelectRow lugar de registrar su propio controlador de click . El segundo parámetro de la beforeSelectRow llamada beforeSelectRow es el objeto Evento del click . Por lo tanto, uno puede usar event.target para obtener toda la información requerida. No se requiere rowid para establecer. Especialmente su código actual le asigna el mismo valor de identificación en el botón como rowid ( id de la fila externa).

No es necesario asignar ningún id al botón y usar $(e.target).closest("tr.jqgrow").attr("id") lugar para obtener el rowid.

La definición final de la columna con el botón podría ser, por ejemplo, la siguiente:

{ name: "mybutton", width: 100, sortable: false, resizable: false, hidedlg: true, search: false, align: "center", fixed: true, viewable: false, formatter: function () { return "<button class=/"viewLineItem/">View Line Item</button>"; } }

y el código de beforeSelectRow podría ser

beforeSelectRow: function (rowid, e) { if ($(e.target).is("button.viewLineItem")) { alert($(e.target).closest("tr.jqgrow").attr("id")); return false; // don''t select the row on click on the button } return true; // select the row }

Vea la demostración https://jsfiddle.net/OlegKi/x0j55z1m/