나는이 문제를 매우 잘 이해하고있다. 나는 현재 사용할 수있는 predefined formatter ('showlink'및 'link'포매터) 모두 충분히 융통성이 없다는 데 동의합니다.
here을 다운로드 할 수있는 다른 포맷터를 제안 해 드릴 수 있습니다. 포맷터의 사용은 매우 간단합니다 :
{label: "AddToCart", name: "Addtocrt_addtocrt", formatter: "dynamicLink",
formatoptions: {
url: function (cellValue, rowId, rowData) {
return '/Store/AddToCart' + rowId + '?' +
$.param({
quantity: rowData.Stocks_valkogus
});
}
}
}
함수로 정의 된 url
는 href
속성의 값으로 <a>
에 사용됩니다. url
formatoptions
'dynamicLink'포맷터 또한
도 작동 될 수
cellValue
및 매개
rowId
와
onClick
콜백
iRow
,
iCol
,
cellValue
,
e
('showlink'에 의해 동일한 의미)
target
옵션을 지원 .
onClick
콜백이 정의 된 경우
url
값은 무시됩니다. 따라서 포맷터 옵션
url
의 정의를 건너 뛸 수 있습니다. 나는의 코드를 배치 할 계획
/*global jQuery */
(function ($) {
'use strict';
/*jslint unparam: true */
$.extend($.fn.fmatter, {
dynamicLink: function (cellValue, options, rowData) {
// href, target, rel, title, onclick
// other attributes like media, hreflang, type are not supported currently
var op = {url: '#'};
if (typeof options.colModel.formatoptions !== 'undefined') {
op = $.extend({}, op, options.colModel.formatoptions);
}
if ($.isFunction(op.target)) {
op.target = op.target.call(this, cellValue, options.rowId, rowData, options);
}
if ($.isFunction(op.url)) {
op.url = op.url.call(this, cellValue, options.rowId, rowData, options);
}
if ($.isFunction(op.cellValue)) {
cellValue = op.cellValue.call(this, cellValue, options.rowId, rowData, options);
}
if ($.fmatter.isString(cellValue) || $.fmatter.isNumber(cellValue)) {
return '<a' +
(op.target ? ' target=' + op.target : '') +
(op.onClick ? ' onclick="return $.fn.fmatter.dynamicLink.onClick.call(this, arguments[0]);"' : '') +
' href="' + op.url + '">' +
(cellValue || ' ') + '</a>';
} else {
return ' ';
}
}
});
$.extend($.fn.fmatter.dynamicLink, {
unformat: function (cellValue, options, elem) {
var text = $(elem).text();
return text === ' ' ? '' : text;
},
onClick: function (e) {
var $cell = $(this).closest('td'),
$row = $cell.closest('tr.jqgrow'),
$grid = $row.closest('table.ui-jqgrid-btable'),
p,
colModel,
iCol;
if ($grid.length === 1) {
p = $grid[0].p;
if (p) {
iCol = $.jgrid.getCellIndex($cell[0]);
colModel = p.colModel;
colModel[iCol].formatoptions.onClick.call($grid[0],
$row.attr('id'), $row[0].rowIndex, iCol, $cell.text(), e);
}
}
return false;
}
});
}(jQuery));
을 :
formatter: 'dynamicLink'
의 현재 코드 아래 찾을 수 있습니다
The demo
는 'dynamicLink'포맷의 사용을 보여 jatter에 formatter와 다른 플러그인들을 jqGrid에 추가합니다.
업데이트 :
Free jqGrid는
formatter: "showlink"
의 옵션 (
the wiki article 및
the answer 참조) 연장한다. 따라서 무료 사용 jqGrid의 경우
formatter: "dynamicLink"
을 사용할 필요가 없습니다.
고맙습니다. 이것을 시도했지만 편집 시작 전에 수량이 반환됩니다. 나는 질문을 업데이트했다. – Andrus
@Andrus :'repeatitems : true'를 갖는'jsonReader'를 사용하면'rowData.Stocks_valkogus' 대신'rowData [iCol]'을 사용해야합니다. formatter는'rowData' 매개 변수를'url' 함수로 전달하고 데이터 형식에 맞는 표기법을 사용합니다. 당신은 데이터의 * 편집 * 문제에 대해 추가로 썼다. 그러나 정확히 어떤 문제가 있는지 이해하지 못한다. 기존 문제를 더 정확하게 설명 할 수 있습니까? – Oleg
사용자가 수량 열에서 클릭합니다. 인라인 편집이 시작됩니다. 사용자가 원하는 수량을 입력하고 dynamicformatter를 사용하여 만든 장바구니 링크를 클릭하십시오. 이 경우 dynamicformatter는 입력 된 수량을 url로 전달해야합니다. 다이내믹 포맷 생성 코드는 사용자가 입력 한 수량을 포함하는 입력 요소의 내용을 검색해야합니다. 또는 편집 한 행을 저장하고 저장 후 입력 된 수량을 검색하는 것이 더 낫습니까? 저장하면 서버에 데이터를 게시해서는 안됩니다. – Andrus