绑定多个动态jqgrid时覆盖参数

时间:2016-03-22 13:33:28

标签: javascript c# jquery jqgrid

我有以下代码来绑定jqgrid。我的页面中有多个jqgrid。 我通过下面的代码动态绑定所有。

var MyGridData = MyGridData || (function() {

return {
   init : function(Args) {
       _args = Args;
  },
initiateGrid: function() {
  this.fillGridSchema(_args[6]);
 },
fillGridSchema : function() {
   $('#' + _args[0]).jqGrid({

       //All basic code for binding jqgrid (url,colnames...)

   });
 }
}

当我想绑定我的SalesInquiryDetails网格时,我会调用下面的代码。

MyGridData.init([ 'SalesInquiryDetails',...(other required args) ]);
MyGridData.initiateGrid();

如果我想绑定SalesReferenceGrid,那么

MyGridData.init([ 'SalesInquiryReference',...(other required args) ]);
MyGridData.initiateGrid();

现在,我每次都得到最后一个绑定网格的_args。并没有获得我为之前的网格定义的事件。

请指导我。 如何触发先前args数组中给出的先前网格事件函数。

提前致谢。

1 个答案:

答案 0 :(得分:0)

  

现在,我每次都得到最后一个绑定网格的_args。

是的,因为你只有一个_args变量,它是一个全局变量。通过在松散模式下分配一个未定义的符号,你的代码正在成为我所谓的The Horror of Implicit Globals的牺牲品,它会伸出并创建一个全局变量。 JavaScript的一个主要缺陷,在2009年通过严格模式修复。(我强烈建议使用严格模式。)

为了拥有多个_args,您可能希望init返回某个内容(一个对象),在其上存储_args,然后调用{{ 1}}在那个对象上。你的单身人士只记得你设定的最后一个州,所以不要让它成为单身人士。

您可能会采用标准构造函数:

initiateGrid

或者使用ES2015:

var MyGridData = MyGridData || (function() {
    function MyGridData(args) {
        this.args = args;
    }
    MyGridData.prototype.initiateGrid = function() {
        this.fillGridSchema(this.args[6]);
    };
    MyGridData.prototype.fillGridSchema = function(/*shouldn't you be using an arg here, since you pass one in `initiateGrid`?*/) {
        $('#' + this.args[0]).jqGrid({
            //All basic code for binding jqgrid (url,colnames...)
        });
    };

    return MyGridData;
})();

// Usage
var salesDetailsGrid = new MyGridData([ 'SalesInquiryDetails',...(other required args) ]);
salesDetailsGrid.initiateGrid();

var salesInquiryGrid = new MyGridData.init([ 'SalesInquiryReference',...(other required args) ]);
salesInquiryGrid.initiateGrid();

但JavaScript很灵活,还有很多其他方法,比如工厂功能。

注意:上面的代码仅仅是作为示例,它并不代表经过测试或经过全面审核的代码。