我正在做我自己的 jQuery 插件来显示搜索屏幕。我正在测试代码,但我的代码有问题......
我在我的代码中执行了一系列链式事件,并在代码中的一个确定点处,我正在失去调用位置的原始范围(分析得很好,结果是预期的,但不是我想要的)
我该怎么做才能保留 this
对象的原始范围
_load_zona: function(e){
var ev;
ev = {
names:{
key: 'id_zona',
value: 'zona',
},
elements:{
form: this.o.form_name,
select: 'zona'
},
data:{
id_gerencia: $(this.o.form_name + ' select[name="gerencia"]').val(),
id_zona: this.o.seleccion.id_zona
},
events:{
success: this._load_depto
},
url: this.o.url.zona,
defaultText: 'Seleccione una zona ...'
};
if(this.o.csrf !== undefined){
ev.names["csrf"] = this.o.csrf.key;
ev.data[this.o.csrf.key] = this.o.csrf.value;
}
this._commonFillSelect(ev);
},
_load_gerencia: function(e){
var ev;
ev = {
names:{
key: 'id_gerencia',
value: 'gerencia',
},
elements:{
form: this.o.form_name,
select: 'gerencia'
},
data:{
id_gerencia: this.o.seleccion.id_gerencia
},
events:{
success: this._load_zona
},
url: this.o.url.gerencia,
defaultText: 'Seleccione una gerencia ...'
};
if(this.o.csrf !== undefined){
ev.names["csrf"] = this.o.csrf.key;
ev.data[this.o.csrf.key] = this.o.csrf.value;
}
this._commonFillSelect(ev);
},
this._commonFillSelect(ev)
它是一个函数,通过 AJAX 填充选择选项,必要时更新组件,当一切正常时从成功中获取值并执行它。
此代码在外部 JavaScript 文件中
归纳起来就是这样
_load_Gerencia()
-------> _commonFillSelect()
----> _load_zona();
当执行 _load_zona();
时,this
对象改变了它们的作用域,它是我在 _load_gerencia()
中引用的原始 this 对象>.
最佳答案
在调用 _load_zona() 之前,您可以定义另一个变量,通常是“that”作为当前作用域的“this”。
这种方式在JS中比较常用,也被广泛讨论。在此处查看更多信息:Is var self = this; a bad pattern?
关于javascript - 尝试失去范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33874672/