2016-08-10 3 views
0

Я использую jqGrid с встроенным редактором. Я хочу показать значок редактирования, если ячейка не имеет никаких значений.jqGrid показать значок «edit» для редактирования строки

Так я пишу форматчик:

function aFormatter(cellvalue, options, row) { 
     if(cellvalue == null){   
       return 'you can edit this'; 
     }else{ 
      return cellvalue; 
     } 
} 

Отображается you can edit this текст, когда я нажимаю на него поле ввода отображается правильно, однако в поле ввода в качестве начального значения you can edit this?

Как это исправить?


Я использую jqGrid через struts 2 jquery tags plugin, который построен на jqGrid версии

ответ

2

Я думаю, что вы должны определить unformatter (unformat) вместе с форматированием. Например,

formatter: function (cellvalue) { 
    if (cellvalue == null) {   
     return "<span class='ui-icon ui-icon-pencil'></span>"; 
    } else { 
     return cellvalue; 
    }; 
}, 
unformat: function (cellValue, options, elem) { 
    return $(elem).text(); 
} 

Я не знаю, как вы можете указать unformat в плагине struts2 сетки.

Еще один способ будет определение форматировщика следующим образом

(function ($) { 
    "use strict"; 
    /*jslint unparam: true */ 
    $.extend($.fn.fmatter, { 
     yourFormatterName: function (cellValue, options) { 
      if (cellvalue == null) {   
       return "<span class='ui-icon ui-icon-pencil'></span>"; 
      } else { 
       return cellvalue; 
      }; 
     } 
    }); 

    $.extend($.fn.fmatter.yourFormatterName, { 
     unformat: function (cellValue, options, elem) { 
      return $(elem).text(); 
     } 
    }); 
}(jQuery)); 

Это позволяет использовать formatter: "yourFormatterName" (или возможно formatter = "yourFormatterName" в struts2) таким же образом, как вы можете использовать standard formatters"integer", "date" и другие ,

+0

Спасибо, как вы упомянули, struts не поддерживает unformatter, и я использовал расширяйте функцию. но я получаю '$ .fn.fmatter undefined'. Не могли бы вы дать мне знать, как это исправить? –

+0

@AlirezaFattahi: Вы должны включить код ** после ** jqGrid (после 'jquery.jqgrid.min.js'). См. [Строка] (https://github.com/free-jqgrid/jqGrid/blob/v4.7.0/js/jquery.fmatter.js#L50) кода jqGrid, который определяет '$ .fn.fmatter'. – Oleg

+0

Вы правы, но поскольку я использую плагин jqGrid через struts, я не мог найти, где я могу поместить свой код. Я пытаюсь спросить его в новом вопросе, может быть, эксперты, которые могут помочь мне. Благодаря! –

1

Это покажет значок «редактировать» вместо «вы можете изменить это» в сетке

function aFormatter(cellvalue, options, row) { 
    if(cellvalue == null) {   
     return '<span class="ui-icon ui-icon-pencil"></span>' 
    } else { 
     return cellvalue; 
    } 
} 
+0

Такая же проблема ... Когда я нажимаю карандаш, я вижу '' на входе –