如何重用 jqGrid 选项

How to reuse jqGrid options

关于这个问题,我已经看到几个 post。却得不到我想要的实际答案。

我知道我可以为应用程序中的所有 jqGrids 设置全局设置。那么我不需要在新创建的 jqGrids 中提及那些选项。

但我想设置一些模块特定的选项设置。假设我想将 jqGrid 用于我的销售模块。我还设置了一些选项作为我所有 jqGrids 的全局选项。现在对于销售模块,我希望每个销售 jqGrid 都将共享一些通用选项。但是任何销售网格都可以覆盖通用选项中的一个或两个选项。我该怎么做。

如果您能够使用 PHP 或类似的服务器端语言,这很容易实现:

$("#my_grid").jqGrid({
    <?php
        include "global_jqGrid_options.js";
        include "sales_jqGrid_options.js";
    ?>
});


例如,您的选项文件如下所示:

height: 575,        
autowidth: true,
shrinkToFit: true


第二个包含文件中的选项应该覆盖第一个包含文件中的并发选项(但我还没有测试过)。

这真的很容易做到。你应该明白创建 jqGrid 的代码看起来像

$("#gridid").jqGrid(objectWithGridOptions);

一个主要使用匿名内联对象初始化,如

$("#gridid").jqGrid({
    // ... some options
});

但它只做

var objectWithGridOptions = {
    // ... some options
};
$("#gridid").jqGrid(objectWithGridOptions);

所以如果你想创建多个网格

$("#gridid1").jqGrid({
    // ... some common options
    // ... some options specific for grid 1
});
$("#gridid2").jqGrid({
    // ... some common options
    // ... some options specific for grid 2
});
$("#gridid3").jqGrid({
    // ... some common options
    // ... some options specific for grid 3
});

然后您可以使用通用选项定义对象,并使用 $.extend 将其扩展到网格的特定对象。您甚至可以覆盖一些常用选项。因此,如果您在网格 1 和网格 2 中使用某些选项,但在网格 3 中不使用,您仍然可以在公共对象中包含最常见的选项,并且在创建网格 3 期间只包含新值。

代码看起来像

// the part can be in separate js file which you includes
// on all pages of your project
var commonModuleOption = {
        // ... some common options
    };

$("#gridid1").jqGrid($.extend(true, {}, commonModuleOption, {
    // ... some options specific for grid 1
});
$("#gridid2").jqGrid($.extend(true, {}, commonModuleOption, {
    // ... some options specific for grid 2
});
$("#gridid3").jqGrid($.extend(true, {}, commonModuleOption, {
    // ... some options specific for grid 3
});