【问题标题】:Sencha Architect 2: onLaunch never calledSencha Architect 2:onLaunch 从未调用过
【发布时间】:2012-05-02 14:17:25
【问题描述】:

我有一个由 Sencha Architect 2 创建的小应用程序。我已经多次注意到我可以很好地覆盖 Controller 和 Application 对象的 onLaunch,该函数永远不会被调用。我正在使用试用版 2.0.0,构建 412。这是应用程序代码:

Ext.Loader.setConfig({
    enabled: true
});

Ext.application({
    views: [
        'MyContainer',
        'MyGridPanel'
    ],
    autoCreateViewport: true,
    name: 'MyApp',

    onLaunch: function() {
        var container = Ext.getCmp ('glbContainer');

        var cfg = [
        { dataIndex: 'ID', text: 'ID' },
        { dataIndex: 'DISPLAYNAME', text: 'Displayname' }
        ];

        var theGridPanel = this.getComponent ('theGridPanel');

        var config = [];


        for (var jj=0; jj<cfg.length; jj++) {
            var configElem = {};
            configElem.xtype = 'gridcolumn';
            configElem.dataIndex = cfg [jj].dataIndex;
            configElem.text = cfg [jj].text;
            configElem.width = 200;
            config.push (configElem);
        }

        alert (config.length);

        theGridPanel.reconfigure (config);

    }

});

【问题讨论】:

    标签: extjs4 sencha-architect


    【解决方案1】:

    我认为我们没有要覆盖的 onLaunch 方法。应该是launch。看看文档。 Application 或 Controller 类没有 onLaunch 属性。引用文档:

    launch 方法:由 Controller 的应用程序在启动后立即调用 应用程序自己的启动函数已被调用。这通常是一个 运行在应用程序 UI 之后必须运行的任何逻辑的好地方 初始化。另请参阅 init,它在应用程序之前调用 启动函数。

    例子:

    Ext.application({
        name: 'MyApp',
        launch: function() {
            Ext.create('Ext.container.Viewport', {
                items: {
                    html: 'My App'
                }
            });
        }
    });
    

    【讨论】:

    • 嗨,我非常愿意听从你的建议,我一定会尝试启动,但应用程序和控制器都有一个 onLaunch:docs.sencha.com/ext-js/4-1/#!/api/Ext.app.Application。文档说:“这是一个模板方法。这个类的功能的钩子。随意在子类中覆盖它。”
    • 啊!!我大错特错!现在我明白你要做什么了!
    【解决方案2】:

    Launch 是在这里使用的正确方法。

    虽然 Application 是一个 Ext.app.Controller,但它并不总是完全按照控制器的工作。另请注意,您不在这里使用 Ext.define 来定义您的应用程序,您不应该这样做。但是,您正在调用方法 Ext.application({ config });

    设置应用程序启动方法的正确方法

    Ext.application({
        name: 'MyApp',
        controllers: [
            'MyController'
        ],
    
        launch: function() {
    
        }
    
    });
    

    设置控制器启动方法的正确方法

    Ext.define('MyApp.controller.MyController', {
        extend: 'Ext.app.Controller',
    
        onLaunch: function() {
    
        }
    
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-06
      • 2013-01-20
      • 2012-09-22
      • 1970-01-01
      相关资源
      最近更新 更多