免费的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。
最佳答案
我认为人们对模板的工作原理存在误解。 Template 只是一个设置列表,将在 $.extend
中使用,将 colModel
中的一些当前属性与 template 的另一个对象组合起来属性。
我建议阅读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
),您需要在创建网格后应用,那么您只需使用 $。手动扩展
以扩展(并覆盖)现有属性:
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]
的当前设置之后,以便能够覆盖那里。
关于javascript - jqgrid创建后如何应用列模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39318419/