1

我正在创建自己的“库”,因为我想让我的代码保持干燥。这个想法只是扩展 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
});
4

3 回答 3

1

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

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);
    }
});
于 2012-12-29T17:03:10.253 回答
0

在定义对象时,对象不是this.

您可以使用匿名自调用函数:

Ext.define("MyApp.controller.SimpleController",(function(name) {
  return {
    extend: 'Exp.app.Controller',
    nameOfController: name,
    stores: ['MyApp.store.'+name],
    views: ['MyApp.view.'+name+'.Index']
  };
})("Users"));
于 2012-12-29T16:24:11.997 回答
0

这会起作用:

var name = "Users";

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

    nameOfController: name,    

    stores: ['MyApp.store.' + name],
    views: ['MyApp.view.' + name + '.Index']
});

因此,字符串存储在外部变量中。

于 2012-12-29T16:24:33.820 回答