0

我试图弄清楚如何执行以下操作,但我有点困惑。我有一个我称之为模块的视图:

Ext.define('MyApp.view.module.Module', {

  mixins : {
    observable :  'Ext.Util.Observable'
  },

  constructor : function(){
     this.addEvent('clickmodule');
     this.mixins.observable.constructor.call(this, config);
     this.init();
  }
   init : Ext.emptyFn
 });

此类扩展:

 Ext.define('MyApp.view.module.MyModule', {
 extends : 'MyApp.view.module.Module',
 alias : 'widget.mymodule',

  init : function() {
       this.on('clickmodule', function(){
         alert('this is always fired so the event works');
       }, this)
       this.init();
  },

  runModule : function(){
     this.fireEvent('clickmodule');
  }
  });

所以我有一个基本模块,然后是我的真实模块,当调用 runModule() 时,它只会触发我在名为 clickmodule 的基类中创建的事件。这可以工作并触发,但我是 init() 方法中的一个侦听器,它侦听要触发的事件并且它可以工作,所以我知道它被触发了。问题是如何让 Controlerl 监听事件并执行一些操作?我似乎找不到如何做到这一点的例子?因此,例如,我的控制器中有这个,但认为它不正确,我不知道该怎么做:

Ext.define('MyApp.controller.Desktop', {
 extends : 'Ext.app.Controller',
 refs : [
     ref : 'module',
     selector : 'mymodule'
  ],
 views : ['module.MyModule'],
 init : function(){
   this.control({
      'mymodule' : {
         clickmodule : this.onModuleClick
       }
   });
 },

 onModuleClick : function(){
     alert('this never gets called');
 }

});

所以我知道事件被触发了,因为我在课堂上放了一个监听器并且它被调用了。但是我没有在控制器中做正确的事情,因为它在触发时似乎没有得到事件。我想我在设置 this.control 时遗漏了一些东西。

4

1 回答 1

0

原来我的 MyApp.view.module.Module 需要扩展 Ext.Component。这是我可以让事件在控制器中触发的唯一方法。

于 2013-01-15T12:54:09.013 回答