2012-04-28 14 views
3

私のアプリケーションからいくつかのイベントを共有して、ビューとコントローラ間で共有するものを教えてください。 たとえば、イベント:「サーバーからの更新が利用可能です」。 これを行うには、コントローラー内でfireEvent( "updatesAvailable")を実行できますが、それによって他のコンポーネントがそのイベントを発生させる特定のコントローラーをサブスクライブするようになります。Sencha Touch 2は、ビューとコントローラ間でイベントを共有します

私が望むのは、すべてのアプリケーションロジックイベントのサブスクリプションを保持するシングルトンオブジェクトを持つことです。

現在、私は1つの共有ビューインスタンスを持つことで問題を解決し、すべてをサブスクライブすることができます。しかし、アプリケーション内のすべてのイベントを認識しているイベントディスパッチャが1つあります。

+1

を書くことができ、私はいつもそこにすべての「グローバル」のイベントリスナーを入れ、 'GlobalController.js'と呼ばれるコントローラを作成し、対応するハンドラでは、他の関数を呼び出す必要があります。例えば、 'Ext.getApplication()。getController(' controller_1 ')。 、 等々。 –

+0

私は同じようにした – ykhrustalev

答えて

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

関連する問題