Ext JS范围问题

时间:2011-05-25 17:36:22

标签: javascript extjs scope

这是古老的代码,但无论如何......

我正在尝试过滤商店,并在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?

2 个答案:

答案 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()不应该有任何范围问题。