Javascript Ext JS范围问题
这是旧代码,但无论如何 我正在尝试筛选存储,并在组合框中侦听事件,以便刷新它。 我的doQuery事件不起作用(实际上它起作用了,但返回了随机结果集,给人一种wtf的感觉) 但是,这不会自动更新组合框。 所以我尝试了不同版本的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(){
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