这是古老的代码,但无论如何......
我正在尝试过滤商店,并在comboBox中监听事件,因此我可以刷新它。 我的doQuery事件没有工作,(实际上它确实有效,但返回随机结果集,留下整体wtf感觉)
config.store.filterBy(function Filter(record){
//this works
if (record.data.field != ""){
return true;
}
else {return false;}
});
然而,这并不能自动更新组合框。 所以我尝试了各种版本的
cbx = new Ext.getCmp(this);
debugger; //scope right here
this.getStore().on("datachanged",function refresh(){
cbx.reset();// store's scope
});
但是cbx的范围似乎总是存储,而不是组合框。
任何人都有任何线索如何将商店中数据更改事件的监听器添加到comboBox?
答案 0 :(得分:2)
事件回调的默认范围是触发事件的对象。在这种情况下,这将是商店。 on()方法的第三个参数允许您覆盖范围。将第三个参数设置为this
,然后将其设置为好。
从文档(3.x和4.x):
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
答案 1 :(得分:0)
你总是可以在ExtJS中设置一个函数的范围(我假设你使用的是ExtJS 3.x)和Function.createDelegate。
this.getStore().on("datachanged",function() {
cbx.reset();
}).createDelegate(this);
虽然从您提供的代码示例中,我不确定问题是什么,因为cbx.reset()不应该有任何范围问题。