如何在创建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。
如何在创建jqgrid之后但在显示之前应用newOrderPriceTemplate。 如果在创建时在colModel中指定了模板,则它可以正常工作。
使用最新的免费jqgrid,jquery,bootstrap 3,aps.net mvc4,.net 4.6。
我认为存在误解模板如何工作的误解。 模板仅仅是将在$.extend
使用的设置列表,用于将colModel
一些当前属性与另一个模板属性对象组合在一起。
我建议阅读免费jqGrid代码的代码片段 。 以简化forms,代码看起来像
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]
的当前设置之后放置新属性以便能够覆盖它是很重要的。