2012-04-28 127 views
3

我該如何從我的應用程序共享一些事件,以便在視圖和控制器之間共享。 例如,事件:「來自服務器的更新可用」。 要做到這一點,我可以在控制器中使用fireEvent(「updatesAvailable」),但是這使得其他組件可以訂閱觸發該事件的特定控制器。Sencha Touch 2在視圖和控制器之間共享事件

我想要的是有一個單一的對象,將保持所有的應用程序邏輯事件訂閱。

目前我看到我可以解決這個問題,只需要一個共享視圖實例並訂閱它。但是我想知道是否有一個開箱即用的Event Dispatcher知道應用程序中的所有事件。

+1

爲我的實踐,我總是創建一個名爲'GlobalController.js'控制器,把所有的「全球性」的事件監聽器那裏,並在相應的處理函數中調用其他函數的必要函數,例如:'Ext.getApplication()。getController('controller_1')。function_1()','Ext.getApplication()。getController('controller_2')。 , 等等。 – 2012-04-29 08:21:18

+0

我以同樣的方式 – ykhrustalev 2012-04-29 19:38:11

回答

3

據我瞭解,你想使用模式「事件總線」? 您可以使用每個ST2應用程序中存在的'全局'和單個對象 - Ext.Viewport。至少我正在創建我的應用程序,直到現在沒有什麼是不好的。 請注意,創建事件處理程序的最佳位置是控制器的init()方法。

Ext.define('Myapp.controller.ActivitiesController', { 

extend : 'Ext.app.Controller', 

requires : [], 
    config: { 
     refs: { 
      myview: 'myview' 
     } 
... 
    init: function() { 
    var me = this; 

    Ext.Viewport.on({ 
     scope: this, 
     addactivitytype: function (config) { 
        var myview = me.getMyview(), 
         record = config.record 
... 

      }); 
    } 
}); 
在另一個控制器

(或曾經觀看),你可以寫

addActivityTypeTap: function (record) { 
     .... 
     Ext.Viewport.fireEvent('addactivitytype', { 
     record: record 
     }); 
} 
+0

謝謝,我們採用了相同的方法 – ykhrustalev 2012-06-26 08:55:51

相關問題