Javascript 绑定多个动态jqgrid时覆盖参数
我有以下绑定jqgrid的代码。我的页面中有多个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()
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();}