But haven't found final solution. Have tried to implement but without
any success.
update method is called just after showing grid (but nothing was
changed) it also show edits for every record: so if it were 5 records
it will show edits for 10. May be this is due of the copying of data
array by jqGrid. I have tried adding commented line but it doesn't
help.
Here is my code
ko.bindingHandlers.grid = {
init: function (element, valueAccessor) {
var value = valueAccessor();
var dataArr = ko.utils.unwrapObservable(value.data).slice(0);
var grid = $(element).jqGrid({
data: dataArr,
datatype: "local",
localReader:
{ repeatitems: false,
id: value.rowId
},
gridview: true,
height: 'auto',
hoverrows: false,
colModel: value.colModel,
pager: value.pager,
rowNum: 3,
});
//$(element).jqGrid("setGridParam", "data",
ko.utils.unwrapObservable(value.data).slice(0));
},
update: function (element, valueAccessor) {
var value = valueAccessor();
var gridData = $(element).jqGrid('getGridParam', 'data');
var editScript = ko.utils.compareArrays(gridData,
value.data());
for (var i = 0; i < editScript.length; i++) {
switch (editScript[i].status) {
case "added":
$(element).jqGrid("addRowData",
editScript[i].value[value.rowId], editScript[i].value);
break;
case "deleted":
$(element).jqGrid("delRowData",
editScript[i].value[value.rowId]);
break;
}
}
}
};
html is simple enough of jqGrid
<table id="dataGrid" data-bind="grid: { data: developers,
colModel: [
{ name: 'Name', index: 'Name', width: 200, sortable: true },
{ name: 'Desc', index: 'Desc', width: 300, sortable: true }
],
rowId: 'ID',
pager: '#pager'
}">
</table>
<div id="pager"></div>