2014-07-07 43 views
0

呼叫控制器方法,我有我的ExtJS 4.2.1應用傾聽每一位Ajax請求(Ext.data.Connection),所以我可以做自定義錯誤處理和其他的東西。ExtJS的內部Ext.util.Observable.observe

Im做我的Main Controller

Ext.define('App.controller.Main', { 
     extend: 'Ext.app.Controller', 


     init: function (application) { 

      var me = this; 

      this.control({ 
       '[xtype=login] button#btnLogin': { 
        click: me.onLogin 
       }, 
      }); 

      Ext.util.Observable.observe(Ext.data.Connection, { 
       requestcomplete: function (conn, response, options) { 
        // Do stuff on success 
       }, 
       requestexception: me.handleRequestException // Do stuff on failure 
      }); 

     }, 
     handleRequestException: function (conn, response, options) { 

      var me = this; 

      if (response.status == 401) { 

       // here i need to fire the logoutApplication method 

       // have tried: me.fireEvent('logoutApplication'); but fireEvent is undefined because "me" scope is data.Connection 
       // it doesnt know about the controller. 

      } 


     }, 
     logoutApplication: function() { 
      var me = this; 

      // do somestuff here!! 

     } 

裏面的handleRequestException功能林內試圖做me.fireEvent(...)fireEventundefined因爲函數的scopedata.Connection

想用:

var mainController = App.app.getController('App.controller.Main'); 

,因爲調用該init被觸發,我與事件觸發兩次的問題時。

林新在ExtJS所以我敢肯定有一個更好的方式來做到這一點。欣賞任何建議。

回答

0

您可以將scope添加到監聽器的配置:

Ext.util.Observable.observe(Ext.data.Connection, { 
    requestcomplete: function (conn, response, options) { 
     // Do stuff on success 
    }, 
    requestexception: me.handleRequestException, // Do stuff on failure 
    scope: me // add the scope here 
}); 

現在你的聽衆獲得與該範圍內,而不是調用程序範圍內執行。

+0

非常感謝......真棒解:) – VAAA

+0

我創建一個打破我的頭ExtJS的問題。你認爲你可以檢查它嗎? http://stackoverflow.com/questions/24978039/extjs-4-2-datepicker-multiselect-catch-event-in-controller – VAAA