2016-09-04 3 views
1

Бесплатный jqgrid не рекомендует применять шаблон столбца после его создания. Я попыталсяКак применить шаблон столбца после создания jqgrid

var newOrderPriceTemplate = { 
    align: "center", 
    formatter: "showlink", 
    formatoptions: { 
     onClick: function() { alert('clicked'); } 
    } 
    }; 

    $(function() { 
     ... code to create jqgrid into $grid 
     $grid.jqGrid('setColProp', 'Hind', { 
     template: newOrderPriceTemplate, 
     search: false 
    }); 
    }); 

оповещения окно не появляется, если щелкнуть в колонке. search: false удаляет поле поиска правильно, поэтому выполняется setColProp.

Как применить newOrderPriceTemplate после создания jqgrid, но перед отображением. Если шаблон указан в colModel во время создания, он работает.

Последние бесплатные jqgrid, jquery, bootstrap 3, aps.net mvc4, .net 4.6 используются.

ответ

1

Я думаю, что есть непонимание того, как работают шаблоны. Шаблон - это не что иное, как список настроек, которые будут использоваться в $.extend для объединения некоторых текущих свойств от colModel с другим объектом шаблона.

Я рекомендую прочитать код the code fragment кода jqGrid. В упрощенном виде выглядит код

for (iCol = 0; iCol < p.colModel.length; iCol++) { 
    p.colModel[iCol] = $.extend(true, {}, 
     p.cmTemplate, 
     p.colModel[iCol].template || {}, 
     p.colModel[iCol]); 
} 

Других слова jqGrid объединяет значения из cmTemplate, template свойства столбца со свойством colModel. jqGrid делает это в начале создания сетки.

Таким образом, если у вас есть какой-то шаблон (newOrderPriceTemplate, например), которые вам нужно применить после сетки создается, то вам нужно просто использовать $.extend вручную продлить (и перезаписать) существующие свойства:

var p = $grid.jqGrid("getGridParam"); 

p.colModel[p.iColByName.Hind] = $.extend(true, {}, 
    p.colModel[p.iColByName.Hind], // old values 
    newOrderPriceTemplate,   // the applied template 
    { search: false }    // one more setting to apply 
); 

Важно, чтобы здесь были введены новые после текущих настроек от p.colModel[p.iColByName.Hind], чтобы иметь возможность их переписать.

+0

спасибо. Можно ли изменить setColProp так, чтобы он применил это автоматически, если задано свойство шаблона? – Andrus

+0

@ Andrus: Добро пожаловать! Прежде всего я хотел * объяснить *, почему ваш текущий код не работает. Вы можете использовать 'setColProp', если хотите, но код' setColProp' (см. [Здесь] (https://github.com/free-jqgrid/jqGrid/blob/v4.13.4/js/grid.custom.js # L44-L55)) состоит в основном из одной строки '$ .extend (true, p.colModel [p.iColByName [colname]], obj);' и можно использовать ее напрямую. Кроме того, вы хотели применить ** два набора наборов свойств: 'newOrderPriceTemplate' ** и **' {search: false} '. Таким образом, использование одного '.extend' с несколькими параметрами кажется мне более понятным и понятным. – Oleg