HTML 코드를 반환하는 포맷터를 사용하여 셀 내에 작은 테이블 (HTML 테이블)을 정의하려고합니다. 콘텐츠는 동일한 레코드의 일부 숨겨진 필드를 기반으로합니다.setCell이 잘못된 셀을 업데이트합니다.
셀 내의 초기 설정은 잘 진행되고 있습니다. 문제는 나중에 "setCell"을 사용하여 숨겨진 필드를 수정하고 테이블 구조로 필드에 미치는 영향을 확인한다는 것입니다.
jqGrid가 WRONG 셀에 접근하여 일부 혼란을 일으키는 경우가 있습니다. 나는 그것을 증명할 jsFiddle을 만들었습니다.
당신이 볼 수 있듯이
<table id="grid"></table>
<div>
<input id="update" type="button" value="Update">
</div>
var mydata = [{
id: 1,
hiddenA: 1,
hiddenB: 2,
hiddenC: 4,
hiddenD: 8,
hiddenE: 16,
hiddenF: 32,
hiddenG: 64,
hiddenH: 128
}];
$("#grid").jqGrid({
datatype: "local",
data: mydata,
height: 250,
colNames: [
'id',
'hiddenA',
'hiddenB',
'hiddenC',
'hiddenD',
'hiddenE',
'hiddenF',
'hiddenG',
'hiddenH',
'visibleA',
'visibleB'
],
colModel: [
{name: 'id', hidden: true, key: true},
{name: 'hiddenA', hidden: true, width: 50},
{name: 'hiddenB', hidden: true, width: 50},
{name: 'hiddenC', hidden: true, width: 50},
{name: 'hiddenD', hidden: true, width: 50},
{name: 'hiddenE', hidden: true, width: 50},
{name: 'hiddenF', hidden: true, width: 50},
{name: 'hiddenG', hidden: true, width: 50},
{name: 'hiddenH', hidden: true, width: 50},
{name: 'visibleA', width: 80, formatter: addFormatter},
{name: 'visibleB', width: 80, formatter: subFormatter}
],
caption: "Table within a cell",
gridview: true,
loadonce: true,
viewrecords: true,
loadui: "disable",
});
function addFormatter(cellvalue, options, rowObject) {
var ret = " \
<table class='details-table'> \
<tr><td>A+B:</td><td class='al-right'>{0}</td></tr> \
<tr><td>B+C:</td><td class='al-right'>{1}</td></tr> \
<tr><td>C+D:</td><td class='al-right'>{2}</td></tr> \
<tr><td>D+A:</td><td class='al-right'>{3}</td></tr> \
</table> \
";
ret = ret.replace("{0}", rowObject.hiddenA + rowObject.hiddenB);
ret = ret.replace("{1}", rowObject.hiddenB + rowObject.hiddenC);
ret = ret.replace("{2}", rowObject.hiddenC + rowObject.hiddenD);
ret = ret.replace("{3}", rowObject.hiddenD + rowObject.hiddenA);
return (ret);
}
function subFormatter(cellvalue, options, rowObject) {
var ret = " \
<table class='details-table'> \
<tr><td>E-F:</td><td class='al-right'>{0}</td></tr> \
<tr><td>F-G:</td><td class='al-right'>{1}</td></tr> \
<tr><td>G-H:</td><td class='al-right'>{2}</td></tr> \
<tr><td>H-A:</td><td class='al-right'>{3}</td></tr> \
</table> \
";
ret = ret.replace("{0}", rowObject.hiddenE - rowObject.hiddenF);
ret = ret.replace("{1}", rowObject.hiddenF - rowObject.hiddenG);
ret = ret.replace("{2}", rowObject.hiddenG - rowObject.hiddenH);
ret = ret.replace("{3}", rowObject.hiddenH - rowObject.hiddenE);
return (ret);
}
$("#update").bind("click", function() {
$("#grid").jqGrid("setCell", 1, "hiddenE", 256);
$("#grid").jqGrid("setCell", 1, "visibleB", "1");
});
는 "업데이트"버튼을 눌러 "hiddenE"필드를 변경 한 후 바로 업데이 트의 원인은 "visibleB"필드 접촉. 그러나 실제로는 "visibleA"필드가 수정되고 파괴된다는 것입니다.
아이디어가 있으십니까?
당신의 대답 주셔서 감사합니다. 사실 버전 5.2.1이 설치되어 있습니다. 나는 관련 라인을 찾았고 실제로는 "var tcell = $ ("td : eq ("+ pos +") ", ind), cl = 0, rawdat = [];"입니다. 나는 아직 문제가 완전히 해결되지 않았다고 생각한다. – Udi
제안 된 수정을 시도한 후에 실제로 올바른 셀이 업데이트되고 있습니다. 그러나 또 다른 문제는 Formatter에있는 "rowobject"매개 변수가 처음 (행 생성)과 다르게 동작한다는 것입니다. 첫 번째 호출에서는 필드가있는 멋진 객체입니다. "setCell"다음에는 필드없이 HTML 정보를 보유하는 목록 일뿐입니다. 그 이유가 뭐야? – Udi
코드에서와 같이 사용자 정의 포맷터 함수를 정의 할 때 그리드가 포맷터에서 정의한 내용을 알지 못하므로 원래 데이터로 돌아가려면 사용자 정의 unformat 함수를 정의해야합니다. [Guriddo Documentation here] (http://www.guriddo.net/documentation/guriddo/javascript/user-guide/formatters/#custom-formatter)를 읽어 보시기 바랍니다. 또한 현재 setCell 코드에 작은 문제가 있음을 알아야합니다. 수정 사항은 내일 게시되며 다운로드 방법을 알려 드리겠습니다. –