商店中的变量未定义:[]和视图:[] - Ext-JS 4.1.1a

时间:2012-12-29 16:15:42

标签: javascript extjs

我正在创建自己的"图书馆"因为我想保持我的代码DRY。我们的想法只是扩展SimpleController并为其发送一个名称,以便它可以一般性地加载已经创建的存储和视图,但在我的控制台中,我收到一条消息,提示nameOfController未定义。

1。)在这个例子中,为什么nameOfController未定义?

2。)我知道如何扩展SimpleController,但是什么时候初始化 nameOfController ?在init()函数中?是否有一些函数甚至在加载商店之前执行:[]和views:[]?

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
});

3 个答案:

答案 0 :(得分: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);
    }
});

答案 1 :(得分: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"));

答案 2 :(得分:0)

这样可行:

var name = "Users";

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

    nameOfController: name,    

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

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