Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ext JS范围问题_Javascript_Extjs_Scope - Fatal编程技术网

Javascript Ext JS范围问题

Javascript Ext JS范围问题,javascript,extjs,scope,Javascript,Extjs,Scope,这是旧代码,但无论如何 我正在尝试筛选存储,并在组合框中侦听事件,以便刷新它。 我的doQuery事件不起作用(实际上它起作用了,但返回了随机结果集,给人一种wtf的感觉) 但是,这不会自动更新组合框。 所以我尝试了不同版本的 cbx = new Ext.getCmp(this); debugger; //scope right here this.getStore().on("datachanged",function refresh(){

这是旧代码,但无论如何

我正在尝试筛选存储,并在组合框中侦听事件,以便刷新它。 我的doQuery事件不起作用(实际上它起作用了,但返回了随机结果集,给人一种wtf的感觉)

但是,这不会自动更新组合框。 所以我尝试了不同版本的

    cbx = new Ext.getCmp(this);     
    debugger; //scope right here    
    this.getStore().on("datachanged",function refresh(){
         cbx.reset();// store's scope
    });
但是cbx的范围似乎总是在商店,而不是组合框


有人知道如何将存储区中的数据更改事件的侦听器添加到组合框中吗?

您始终可以使用function.createDelegate在ExtJS中设置函数的作用域(我假设您使用的是ExtJS 3.x)

this.getStore().on("datachanged",function() {
     cbx.reset();
}).createDelegate(this);

尽管从您提供的代码示例来看,我不确定问题出在哪里,因为cbx.reset()不应该有任何作用域问题。

事件回调的默认作用域是触发事件的对象。在这种情况下,这将是商店。on()方法的第三个参数允许您重写范围。将第三个参数设置为
this
和good to go

从文档(3.x和4.x)中:

所以,像这样的事情应该可以做到:

this.getStore().on("datachanged", function refresh() {
     cbx = Ext.getCmp(this);
     cbx.reset();
}, this); // <-- Provide scope for the callback function
this.getStore().on(“datachanged”,函数refresh()){
cbx=Ext.getCmp(此);
cbx.reset();
},这个)//
on( String eventName, Function handler, [Object scope], [Object options] )
this.getStore().on("datachanged", function refresh() {
     cbx = Ext.getCmp(this);
     cbx.reset();
}, this); // <-- Provide scope for the callback function