Sencha Touch MVC最佳实践

时间:2011-06-11 18:04:21

标签: sencha-touch extjs

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

我的问题是,这被认为是构建Sench Touch MVC应用程序的最佳做法吗?

2 个答案:

答案 0 :(得分:6)

我有类似的问题。 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

答案 1 :(得分:3)

我建议您的控制器可以识别视图。当控制器收到调度事件时,您应该具有类似于以下内容的内容:

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

这具有额外的好处,即在一个空间中为每个控制器视图提供所有“主”监听器。这也意味着重用其他控制器的视图变得更容易。

你的观点应该都有听众,有助于抽象出各个组成部分及其事件/听众的复杂性。

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