Sencha Touch MVC 最佳实践

Posted

技术标签:

【中文标题】Sencha Touch MVC 最佳实践【英文标题】:Sencha Touch MVC Best Practices 【发布时间】:2011-06-11 18:04:20 【问题描述】:

我正在尝试围绕 Sencha Touch 的 MVC 框架进行思考,但我发现了几种不同的方法。其中一个发现here,有一种构建Sencha Touch 应用程序的方法在SenchaCon 2010 上展示。它增加了Sencha Touch 员工的重量,但它已经有几个月的历史了。在 Sencha Touch MVC 上其他更近期的帖子中,他们有教程(例如 here,以及 Jay Garcia 的 Manning 的 MEAP Sencha In Action)似乎依赖于 Ext.Dispatch视图调用特定的控制器方法,将附加元素传递给控制器​​,这使视图具有控制器意识。

我的问题是,构建 Sench Touch MVC 应用程序的最佳实践是什么?

【问题讨论】:

【参考方案1】:

我也有类似的问题。 Sencha 为您的视图组件实例自动创建大量 getter。这很混乱。

我以 Sencha Touch 2.0 和一个完整的 MVC 脚手架应用程序为例。我将它基于 ExtJS 4.0 MVC 架构。这将在 Sencha Touch 2.0 开发者预览版中开箱即用,并且可以为您节省大量时间。

https://github.com/FrancisShanahan/SenchaTouch2MVCHelloworld

为了回答您的具体问题,最新的 ExtJS 4.0 MVC 架构在控制器的 init 事件中设置了对视图组件实例的侦听器。这是从已经链接的 github 项目中获取的示例:

Ext.define('HelloWorld.controller.Home', 
    extend: 'Ext.app.Controller',   
    views: ['Home', 'SimpleList'],
    .. etc... 
    init: function() 
        // Start listening for events on views
        this.control(
                 // example of listening to *all* button taps
                 'button':  'tap': function () 
            console.log('Every button says Hello world');
         
    ...

如果有帮助,请告诉我, 问候, -fs

【讨论】:

请注意,这已在 sencha2-rc2(2012 年 2 月)中被弃用。如果您在控制器中声明视图,您会收到一条警告,提示您应该在 App 文件中声明所有视图。 谢谢,widged;我喜欢到目前为止在 Sencha 2 中看到的内容。【参考方案2】:

我建议让您的控制器具有视图感知功能。当控制器接收到调度事件时,您应该有类似以下的内容:

this.controllerViewOne = this.controllerViewOne
                         || this.render(
                                 xtype: 'panel',
                                 listeners: 
                                      onMajorUIAction : function(params)
                                           Ext.Dispatch( 
                                                controller : 'ProperController',
                                                action     : 'ProperAction',
                                                historyUrl : 'ProperHistoryUrl',
                                                params : params
                                           );
                                      
                                 
                            );

这还有一个额外的好处,就是将每个控制器视图的所有“主要”侦听器都放在一个空间中。这也意味着重用其他控制器的视图变得更加容易。

您的视图都应该有侦听器,帮助抽象各个组件及其事件/侦听器的复杂性。

我使用 UI 管理器进行全局 UI 更改,例如隐藏/显示主工具栏或显示后退按钮。

【讨论】:

只要您确保将应用程序分解为多个控制器,就不会导致控制器过多。 感谢您的信息。我同意让控制器具有视图感知能力,因为它们正在监听事件是很有意义的。我还听说如果 Touch 跟随 Ext JS,Ext.dispatch() 可能会消失:link

以上是关于Sencha Touch MVC 最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

在 Phonegap / Sencha 中观看 YouTube 的最佳实践

使用 extjs 和 Sencha Architect 进行 Java EE 应用程序开发的最佳实践

Touch ID 身份验证和钥匙串的最佳实践

MVC 验证 - 使用服务层保持 DRY - 最佳实践是啥?

在 asp.net mvc 中返回错误的最佳实践是啥

基于动作的验证最佳实践 Spring MVC