我有以下代码来绑定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数组中给出的先前网格事件函数。
提前致谢。
答案 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很灵活,还有很多其他方法,比如工厂功能。
注意:上面的代码仅仅是作为示例,它并不代表经过测试或经过全面审核的代码。