jqgrid не отображает специальные символы - PullRequest
1 голос
/ 31 января 2012

Мне нужен jqgrid для отображения некоторых специальных символов, таких как "<test>" в некоторых столбцах, попытался использовать autoencode=true, но он изменил все столбцы на HTML-кодировку, как у меня были кнопки в некоторых других столбцах, которые ненужно кодирование, мы можем установить авто-код для определенных столбцов?Есть идеи?

Редактировать: Я использовал форматтер, предложенный Олегом, но я столкнулся с проблемой, когда у меня были кнопки в столбцах, где мне нужно переключаться между режимом редактирования, чтобы «сохранить», сохранить и закончить »и 'отмена' я отправляю код, но я не уверен, как переключаться между скрытием / отображением кнопок в режиме редактирования:

Настройка сетки:

            $("#list").jqGrid({
            url: '<%= Url.Action("JSONData","CompanyInfo")%>',
            datatype: 'json',
            colNames: ['ID', 'Company', 'Address' , 'Employers ', ''],
            colModel: [
                { name: 'ID', index: 'ID', align: 'left', sortable: false, editable: true, hidden: true },
                { name: 'Company', index: 'Company', align: 'left', sortable: false, editable: false, formatter: ConvertLineChartoBR },
                { name: 'Address', index: 'Address', editoptions: { size: 100 }, align: 'left', sortable: false, editable: true, edittype: 'textarea', formatter: ConvertLineChartoBR, unformat: ConvertLineChartoN }, 
                { name: 'Employers', index: 'Employers', editoptions: { size: 100 }, align: 'left', sortable: false, editable: true, edittype: 'textarea' },
                { name: 'act', index: 'act', editable: false, sortable: false, fixed: true, formatter: setupEdit}],
            pager: $('#pager'),
            autowidth: true,
            shrinkToFit: true,
            rowNum: currRecords,
            rowList: [5, 10, 20, 50],
            recordtext: "View Records {0} - {1} of {2}",
            emptyrecords: "No records to view",
            pgtext: "Page {0} of {1}",
            sortorder: "desc",
            viewrecords: true,
            autoencode: true,
            caption: 'Test'
        });

SetupEdit (для форматера)

      function setupEdit(cellvalue,options,rowObject) {

      var btnSave = "<input type='button' value='Save' style='display:none' onclick=\"$('#list').jqGrid('saveRow', '" + options.rowId + "', null,  '<%= Url.Action("GridSave","Company")%>', null, aftersavefunc);\" />";
      var btnSaveFinished = "<input type='button' value='Save & Finish' style='display:none' onclick=\"$('#list').jqGrid('saveRow', '" + options.rowId + "', null, '<%= Url.Action("GridSaveFinished","Company")%>', null, aftersavefunc);\" />";
      var btnCancel = "<input type='button' value='Cancel' style='display:none' onclick=\"$('#list').jqGrid('restoreRow', '" + options.rowId + "', aftercancelfunc);\" />";
      var Edit =  "<input type='button' value='Edit' class='editButton' onclick=\"$('#list').jqGrid('editRow','" + options.rowId+ "',false,oneditfunc);\" />";
        return btnSave + btnSaveFinished + btnCancel + Edit;
    }

OnEdit (при нажатии кнопки «Изменить»)

 function oneditfunc(result, x) {
  // I need to unhide the button of the last column where buttons are populated in setupEdit
  // On Edit click, i need to enable btnSave,btnSaveFinished and btnCancel
  //Again on aftersavefunc/aftercancelfunc i need to reset back the column value to display on Edit button
 }

Ответы [ 4 ]

2 голосов
/ 31 января 2012

К сожалению, вы не можете установить autoencode: true только для одного столбца.

Я думаю, что ваша настоящая проблема возникла из-за неправильного размещения разметки HTML в столбце, где вы создаете кнопки. Возможно, вы размещаете разметку HTML как часть данных, что не очень хорошо. Лучше всего использовать пользовательские форматеры . В этом случае вы должны поместить в JSON-ввод для столбца кнопки только данные , которые могут быть использованы форматером, например, в качестве текста кнопок. Если вам нужен тот же текст для кнопок, вы можете иметь пустые данные для столбца кнопки. Например

formatter: function () {
    return "<span class='ui-icon ui-icon-plus'></span>";
}

В этом случае вы можете использовать autoencode: true без проблем. Кнопки будут отображаться по мере необходимости, а тексты, такие как <test>, будут кодироваться и корректно отображаться.

ОБНОВЛЕНО : Вы можете использовать getColumnIndexByName, который я использовал во многих моих старых ответах:

var getColumnIndexByName = function (grid, columnName) {
        var cm = grid.jqGrid('getGridParam', 'colModel'), i, l = cm.length;
        for (i = 0; i < l; i++) {
            if (cm[i].name === columnName) {
                return i; // return the index
            }
        }
        return -1;
    };

Помогает получить индекс столбца в colModel по столбцу. Например, чтобы внешний вид кнопок соответствовал стилю пользовательского интерфейса jQuery, который вы можете использовать

loadComplete: function () {
    var iAct = getColumnIndexByName ($(this), 'act');
    $(this).find("tbody>tr.jqgrow>td:nth-child(" + (iAct + 1) +
        ")>input[type='button']").button();
}

Сообщите нам, что вы знаете rowid и хотите получить кнопки, которые вы поместили в столбец 'act'. Тогда вам нужно показать некоторые оттуда или скрыть другие. Вы можете использовать следующий фрагмент кода:

var iAct = getColumnIndexByName ($(this), 'act'),
    $td = $('#' + $.jgrid.jqID(rowid) + ">td:nth-child(" + (iAct + 1) + ")"),
    $save = $td.find(">input[value='Save']"),
    $saveAndFinish = $td.find(">input[value='Save & Finish']"),
    $cancel = $td.find(">input[value='Cancel']"),
    $edit = $td.find(">input[value='Edit']");
$save.show();
$saveAndFinish.show();
$cancel.show();
$edit.hide();

Я бы порекомендовал вам использовать значки с подсказками вместо текста в кнопках, чтобы сохранить место в сетке.

0 голосов
/ 13 июля 2012

Отображает ли jqgrid специальные символы?

"Вы также должны utf8_encode (" string ") свою строку в PHP."

0 голосов
/ 31 января 2012

интерпретируется как HTML-теги.вам просто нужно изменить < and > на &lt; and &gt; .. если вы используете php, функция htmlspecialchars поможет вам сделать это.Но я верю, что в большинстве языков есть похожие функции.

0 голосов
/ 31 января 2012

Попробуйте HTML-сущности &gt; и &lt; для > и < соответственно.

Я использую их ниже:

Еще один символ, который может помочь, это &amp; для &.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...