我要创建自己的“库”,因为我想让代码保持DRY。这个想法只是扩展SimpleController并给它发送一个名称,这样它就可以一般地加载已经创建的存储和视图,但是在我的控制台中,我收到一条消息,提示nameOfController未定义。

1.)在此示例中,为什么未定义nameOfController?

2)我知道如何扩展SimpleController,但是什么时候该初始化nameOfController呢?在init()函数中?在加载存储[]和视图:[]之前,是否有一些功能可以执行?

Ext.define('MyApp.controller.SimpleController', {
    extend: 'Ext.app.Controller',

    nameOfController: "",


    stores: ['MyApp.store.' + this.nameOfController],
    views: ['MyApp.view.' + this.nameOfController + '.Index']


编辑:(扩展示例)

Ext.define('MyApp.controller.Users', {
    extend: 'MyApp.controller.SimpleController',

    nameOfController: "Users"  //I want to this nameOfController
                               //changes the one in superclass
});

最佳答案

您可以为控制器定义构造函数。例:

Ext.define('MyApp.controller.SimpleController', {
    extend: 'Ext.app.Controller',
    nameOfController: "",

    //stores: ['MyApp.store.' + this.nameOfController],
    //views: ['MyApp.view.' + this.nameOfController + '.Index']

    constructor: function(config) {
        var name = config.nameOfController;

        config.stores = config.stores || [];
        config.views = config.views || [];

        config.stores.push('MyApp.store.' + name);
        config.views.push('MyApp.view.' + name + '.Index');

        this.callParent(arguments);
    }
});

09-19 01:01