2011-05-25 99 views
2

這是舊式的代碼,但無論如何...Ext JS範圍問題

我想過濾商店,並在組合框中偵聽事件,所以我可以刷新它。 我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的範圍似乎總是商店,而不是組合框。

任何人都有任何線索如何添加一個商店中的數據更改事件的監聽器添加到組合框?

回答

2

事件回調的默認範圍是觸發事件的對象。在這種情況下,這將是商店。 ()方法的第三個參數允許你覆蓋範圍。將第三個參數設置爲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 
0

您可以隨時使用Function.createDelegate在ExtJS中設置函數的作用域(我假設您使用ExtJS 3.x)。

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

儘管從您所提供的代碼示例,我不知道是什麼問題,因爲cbx.reset()不應該有任何的範圍問題。