2012-04-28 115 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

相关问题