2013-05-09 90 views
2

当构建应用程序时,设置控制器的最佳方式是什么?我知道路由,事件监听器和大多数所有的交互性都应该由控制器来管理,但是我的主控制器已经开始失去控制,并且我不知道如何将我的逻辑最好地分离成单独的控制器,而不需要让他们一直“运行”...初始化和解构控制器的最佳实践

回答

2

将应用程序全部加载到应用程序启动时即使使用数千个控制器,也可以使用 数百个 。这是需要时间的视图渲染。

尽管使用sencha cmd,请确保您的应用程序尽可能最小化并且连接在一起。

在测试中,我创建了1000个简单的控制器,就像这样:

Ext.define('app.controller.ControllerN', { 
    extend: 'Ext.app.Controller', 
    init: function(application) {  
     this.control({ 
      buttonN1: { 
       click: function() { 
       } 
      }, 
      buttonN2: { 
       click:function(){} 
      }, 
      ... 20 listeners 
     }); 
    } 
}); 

我他们串联成一个文件,并加载它们在app.js这样的:

Ext.application({ 
    name:'app', 
    controllers:[ 
     'Controller0', 
     'Controller1' 
     ... 1000 controllers 
    ], 
    launch:function(){} 
} 

花浏览器刷新(Chrome)一秒钟,直到最后一个控制器的init方法被调用。

+2

如何编写1000个控制器,每个监听20个事件?它不会像你想象的那么快。确实,通常渲染会给你带来瓶颈,但DeftJS的方式很好。在DeftJs中,您将视图控制器绑定到视图实例。在ExtJS控制器中是单身人士。 – catalinux 2013-06-09 15:35:29

+0

@catalinux。更新了我的答案。 Singleton控制器在extjs中工作正常,即使有多个视图实例。你如何用Deft选择表单中的所有字段? – 2013-06-25 21:21:52

1

我有类似的问题,所以我根据它将支持的业务功能划分控制器,例如userController执行所有与用户相关的操作,例如登录,注销,更新等,而cartController则执行与购物车有关的所有操作,如添加到购物车,应用优惠券,付款等。由于单个视图可以具有与不同应用领域相关的许多功能,您可以在多个控制器中将此参考添加到此视图中,并仅侦听相应控制器中的相关事件。

+0

好的,你是否将所有的控制器添加到你的主应用程序?你知道如何根据活动视图来定义你需要哪些控制器吗? – 2013-05-10 19:00:42

+0

是的,我确实在'Ext.application'' controllers'数组中添加了所有控制器,以便应用程序加载所有这些控制器,并根据控制器的'control'配置找出哪个控制器将侦听触发事件。顺便说一句,我不明白你的问题:'你知道怎么根据活动视图定义你需要哪个控制器吗?'因为控制器的'ref' config是我们定义控制器处理哪些视图的地方。 – ThinkFloyd 2013-05-13 05:39:46