jqGrid - 扩展以保持一致性

Ron*_*onR 2 jqgrid

我想将jqGrid用于很多只有一小组特定于应用程序的列类型的网格,并且我想创建一种强制一致性的方法.例如,我希望显示行的合规性状态的所有列具有特定格式,以特定方式对齐,具有特定搜索选项等.因此,不要像这样使用colmodel条目:

{ name: 'ABC', width: 80, align: 'center', stype: "select", 
              searchoptions: { value: "1:Compliant;0:Not Compliant"} }
Run Code Online (Sandbox Code Playgroud)

我想要一个这样的:

{ name: 'ABC', width: 80, mytype: compliancestatus }
Run Code Online (Sandbox Code Playgroud)

compliancestatus是我要写的函数.

这种事情是否可行 - 没有修改jqGrid源代码?如果是这样,有人能指出我这种类型的扩展的例子吗?

Ole*_*leg 5

由于jqGrid 3.8.2是支持的列模板.

你可以定义一下例子

var compliancestatus = {
        width: 80,
        align: 'center',
        stype: "select", 
        searchoptions: { value: "1:Compliant;0:Not Compliant" }
    };
Run Code Online (Sandbox Code Playgroud)

在可见范围内的某个地方,然后只使用 colModel

{ name: 'ABC', template: compliancestatus }
Run Code Online (Sandbox Code Playgroud)

在模板中,您可以包含任何参数.如果列定义具有相同的属性但具有相同的值,如

{ name: 'ABC', width: 100, template: compliancestatus }
Run Code Online (Sandbox Code Playgroud)

将使用colModel(width: 100在案例中)的值.

我之前提出了这个功能,我自己也在密集使用它.例如,我有许多网格,其中有许多带复选框的列.我在案例中使用以下模板:

mySettings.templateCheckbox = {
    formatter: 'checkbox', align: 'center', width: 20,
    edittype: 'checkbox', editoptions: { value: "1:0" },
    stype: "select", searchoptions: { sopt: ['eq', 'ne'], value: ":Any;1:Yes;0:No" }
};
Run Code Online (Sandbox Code Playgroud)

以同样的方式,我定义了许多其他模板,这些模板减少了网格代码并改进了公共网格样式的管理.

如果要更改所有列的一些常见默认设置,可以使用cmTemplatejqGrid的参数.例如

cmTemplate: { align: 'center' }
Run Code Online (Sandbox Code Playgroud)

您可以将它用作jqGrid的附加参数,或者将其设置为与其他任何默认参数一样

$.extend($.jgrid.defaults, {
    cmTemplate: { align: 'center' }
});
Run Code Online (Sandbox Code Playgroud)

在此处阅读有关列模板的更多信息.