2015-06-01 55 views
0

我正在使用ExtJS 4.1。在用戶界面我有兩個按鈕 - btnOne & btnTwo。我點擊兩個按鈕後,我都會加載一個商店。根據一定的條件在ExtJs商店中添加回調函數

我想要什麼:點擊任何按鈕,我仍然想加載商店,但點擊btnOne,我想加載商店,當商店被加載時,我想調用回調函數。我不能添加商店負載的回調函數,因爲我只想在單擊btnOne時調用回調函數。

我看了store load docs &負載方法實際上允許一個回調函數。

store.load({ 
    scope: this, 
    callback: function(records, operation, success) { 
     // the operation object 
     // contains all of the details of the load operation 
     console.log(records); 
    } 
}); 

如果回調範圍不需要進行設置,功能可以簡單地通過:

store.load(function(records, operation, success) { 
    console.log('loaded records'); 
}); 

但在我的情況下,回調函數商店加載之前獲取調用。

我不想爲此保留一個變量。

請建議。

回答

0

全局變量的想法是正確的,只是你不應該使全局變量,但本地(你的控制器)。所以,在你的控制器中添加兩個內部狀態對於每個被點擊的按鈕,並在店內負荷回調檢查這些狀態:

//in your controller: 
var ctrl = this;//ctrl == this == controller 
store.on('load', function() { 
    if (ctrl.firstButtonClicked && ctrl.secondButtonClicked) { 
     mySecondCallback(withArguments); 
    } 
}) 
+0

有什麼辦法可以實現這一點,而不需要維護varibales? – SharpCoder

+0

否:一個按鈕沒有狀態,所以你必須在變量中保持某個狀態。但是您可以將這些變量保存在按鈕本身中:'button。[prefix] Clicked = true'(更改前綴以確保您不會弄亂Ext框架的內部變量)。或者,您可以使用一些複選框,如果選擇了一個複選框,則無法取消選擇。 –

0

有你的回調定義,說onStoreLoad(),在控制器級別,而多了一個功能帶有一個參數(回調函數指針)專門用於加載商店。

onStoreLoadComplete: function() {} 

loadStore: function(callback) { 
     store.load({callback: callback}); 
} 

點擊按鈕,您可以決定是否希望將回調函數引用傳遞給第二個函數,這將解決您的問題。

onFirstButtonClick: function(){ 
     this.loadStore(this.callback); 
    } 

    onSecondButtonClick: function(){ 
     this.loadStore(); 
    }