2015-03-11 2 views
0

У меня есть ситуация, когда я использую formatter: 'select' для одного из моих colModels. Например:jqGrid - Как предоставить несколько заранее определенных форматировщиков через пользовательский форматтер

{ key: false, name: 'Col5Id', index: 'Col5Id', editable: true, width: 140, edittype: 'select', editoptions: { value: getKeyValuePairsForDisplay('/Controller/Action', 'Id', 'Name') }, formatter: 'select' }, 

И это отлично работает, но мне также нужно включить это значение в гиперссылкой (который, как правило, делается с помощью formatter: 'showlink', но я не могу использовать его, потому что jqGrid принимает только один форматировщик). Обходной путь из моих исследований заключается в использовании пользовательского форматирования и выполнения этого.

От this question кажется, что пользовательский форматтер может вызывать «несколько форматировщиков в зависимости от значения базовых данных». Как можно это сделать?

Буду признателен за любую помощь, спасибо!

+0

Вы могли бы включить ** примеры входных данных для столбца и примеры результатов форматирования **, которые вам нужно получить. Важно знать, какую версию jqGrid вы используете. 'formatter:" showlink "' есть, например, в бесплатном jqGrid 4.8 (который я опубликовал недавно [здесь] (https://github.com/free-jqgrid/jqGrid) и [здесь] (https://github.com/ free-jqgrid/jqGrid/wiki/Access-free-jqGrid-from-different-CDNs)) гораздо больше возможностей. См. Статью [wiki article] (https://github.com/free-jqgrid/jqGrid/wiki/improvement-of-formatter:-%22showlink%22). – Oleg

+0

@Oleg Спасибо за ответ Олег. Я использую jqGrid 4.6 битв. Я опубликовал свой ответ ниже - один из ваших ответов старшего возраста по другому вопросу тоже помог мне. – RizJa

ответ

0

Поставлено!

Существует несколько способов, которыми это можно сделать.

Во-первых, я изменил colModel на:

{ key: false, name: 'Col5Id', index: 'Col5Id', editable: true, width: 140, edittype: 'select', editoptions: { value: getKeyValuePairsForDisplay('/Controller/Action', 'Id', 'Name') }, formatter: myFormatter }, 

Затем я построил myFormatter как:

function myFormatter(cell, options, row) { 
    //Method 1 - Manually specify URL (worked better in my case) 
    var selectValue = $.fn.fmatter.select(cell, options, row); 
    return "<a href='/Controller/Action' title='View' id='viewId'>" + selectValue + "</a>"; 

    //Method 2 - Pass the formatted value from the select formatting into the showlink function 
    return $.fn.fmatter.showlink(($.fn.fmatter.select(cell, options, row), options); 
} 

споткнулся Также через this answer by Oleg который указывает другой способ выполнить задачу.

Надеюсь, кому-то это поможет! Ура!