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

Javascript 绑定多个动态jqgrid时覆盖参数,javascript,c#,jquery,jqgrid,Javascript,C#,Jquery,Jqgrid,我有以下绑定jqgrid的代码。我的页面中有多个jqgrid。 我通过下面的代码动态地绑定了所有代码 var MyGridData = MyGridData || (function() { return { init : function(Args) { _args = Args; }, initiateGrid: function() { this.fillGridSchema(_args[6]); }, fillGridSchema : function()

我有以下绑定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...)

   });
 }
}
MyGridData.init([ 'SalesInquiryDetails',...(other required args) ]);
MyGridData.initiateGrid();
当我想绑定SalesInquiryDetails网格时,我调用下面的代码

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...)

   });
 }
}
MyGridData.init([ 'SalesInquiryDetails',...(other required args) ]);
MyGridData.initiateGrid();
如果我想绑定SalesReferenceGrid

MyGridData.init([ 'SalesInquiryReference',...(other required args) ]);
MyGridData.initiateGrid();
现在,我每次都得到最后一个绑定网格的参数。没有得到我为上一个网格定义的事件

请引导我。 如何激发前一个args数组中给定的前一个网格事件函数

提前谢谢

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

对,因为您只有一个
\u args
变量,它是全局变量。您的代码在松散模式下分配给一个未定义的符号,这会影响到您并创建一个全局变量,这就是我所说的。JavaScript的主要缺陷之一,在2009年通过严格模式修复。(我强烈建议使用严格模式。)

为了有多个
\u args
,您可能需要
init
返回某个对象,在其上存储
\u args
,然后在该对象上调用
initiateGrid
。你的单身汉只能记住你设置的最后一个状态,所以不要让它成为单身汉

一种方法是使用标准构造函数:

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();
或使用ES2015:

let MyGridData = MyGridData || (function() {
    class MyGridData {
        constructor(args) {
            this.args = args;
        }
        initiateGrid() {
            this.fillGridSchema(this.args[6]);
        }
        fillGridSchema(/*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
let salesDetailsGrid = new MyGridData([ 'SalesInquiryDetails',...(other required args) ]);
salesDetailsGrid.initiateGrid();

let salesInquiryGrid = new MyGridData.init([ 'SalesInquiryReference',...(other required args) ]);
salesInquiryGrid.initiateGrid();
但是JavaScript是灵活的,还有很多其他的方法,比如工厂函数

注意:上面的代码只是作为一个示例,并不表示经过测试或彻底审查的代码

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

对,因为您只有一个
\u args
变量,它是全局变量。您的代码在松散模式下分配给一个未定义的符号,这会影响到您并创建一个全局变量,这就是我所说的。JavaScript的主要缺陷之一,在2009年通过严格模式修复。(我强烈建议使用严格模式。)

为了有多个
\u args
,您可能需要
init
返回某个对象,在其上存储
\u args
,然后在该对象上调用
initiateGrid
。你的单身汉只能记住你设置的最后一个状态,所以不要让它成为单身汉

一种方法是使用标准构造函数:

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();
或使用ES2015:

let MyGridData = MyGridData || (function() {
    class MyGridData {
        constructor(args) {
            this.args = args;
        }
        initiateGrid() {
            this.fillGridSchema(this.args[6]);
        }
        fillGridSchema(/*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
let salesDetailsGrid = new MyGridData([ 'SalesInquiryDetails',...(other required args) ]);
salesDetailsGrid.initiateGrid();

let salesInquiryGrid = new MyGridData.init([ 'SalesInquiryReference',...(other required args) ]);
salesInquiryGrid.initiateGrid();
但是JavaScript是灵活的,还有很多其他的方法,比如工厂函数


注意:上面的代码只是一个示例,并不代表经过测试或彻底审查的代码。

对不起,ES2015是什么意思?@Jaykishan:JavaScript规范的最新版本,更严格地说是ECMAScript规范,于去年6月发布。因此,ES2015是最新版本,ES5(ECMAScript 5)是2009年之前的版本,ES3(1999年)是1999年之前的版本。(没有ES4。)浏览器正在努力支持ES2015中的所有新功能。有些,比如最新的Chrome,非常接近。但当然,传统浏览器永远不会。我应该在哪里声明args?@Jaykishan:同样,你不能只使用一个
args
。这就是为什么我用一个对象展示了上面的解决方案。我没有在$('#'+this.args[0]).jqGrid({//绑定jqGrid的所有基本代码(url,colnames…})中得到this.args;我想在jqgrid的事件上调用函数名dynamic。像loadcomplete:function(){var fn=window[_args[2]];if(typeof fn=='function'){fn();}对不起,ES2015是什么意思?@Jaykishan:JavaScript规范的最新版本,更严格地说是ECMAScript规范,于去年6月发布。因此,ES2015是最新版本,ES5(ECMAScript 5)是2009年之前的版本,ES3(1999年)是1999年之前的版本。(没有ES4。)浏览器正在努力支持ES2015中的所有新功能。有些,比如最新的Chrome,非常接近。但当然,传统浏览器永远不会。我应该在哪里声明args?@Jaykishan:同样,你不能只使用一个
args
。这就是为什么我用一个对象展示了上面的解决方案。我没有在$('#'+this.args[0]).jqGrid({//绑定jqGrid的所有基本代码(url,colnames…})中得到this.args;我想在jqgrid的事件上调用函数名dynamic。与loadcomplete类似:function(){var fn=window[_args[2]];if(typeof fn=='function'){fn();}