Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 存储区[]和视图[]中未定义的变量-Ext JS 4.1.1a_Javascript_Extjs - Fatal编程技术网

Javascript 存储区[]和视图[]中未定义的变量-Ext JS 4.1.1a

Javascript 存储区[]和视图[]中未定义的变量-Ext JS 4.1.1a,javascript,extjs,Javascript,Extjs,我正在创建自己的“库”,因为我想保持代码的干燥。这个想法只是扩展SimpleControl并向它发送一个名称,这样它就可以加载已经创建的存储和视图,但是在我的控制台中,我收到一条消息,即控制器的名称未定义 1.)在本例中,为什么未定义控制器的名称 2.)我知道如何扩展SimpleController,但何时是初始化控件名称的正确时间?在init()函数中?在加载存储区[]和视图[]之前是否执行了某些函数 Ext.define('MyApp.controller.SimpleController'

我正在创建自己的“库”,因为我想保持代码的干燥。这个想法只是扩展SimpleControl并向它发送一个名称,这样它就可以加载已经创建的存储和视图,但是在我的控制台中,我收到一条消息,即控制器的名称未定义

1.)在本例中,为什么未定义控制器的名称

2.)我知道如何扩展SimpleController,但何时是初始化控件名称的正确时间?在
init()
函数中?在加载存储区[]和视图[]之前是否执行了某些函数

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

    nameOfController: "",


    stores: ['MyApp.store.' + this.nameOfController],
    views: ['MyApp.view.' + this.nameOfController + '.Index']
编辑:(扩展示例)


在定义对象时,该对象不是
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"));

在定义对象时,该对象不是
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"));
这将有助于:

var name = "Users";

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

    nameOfController: name,    

    stores: ['MyApp.store.' + name],
    views: ['MyApp.view.' + name + '.Index']
});
因此,字符串存储在外部变量中。

这将起作用:

var name = "Users";

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

    nameOfController: name,    

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

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

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

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

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

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

表达式
this.nameOfController
立即计算,但“nameOfController”属性仅在计算整个对象文本并创建相应对象后创建。表达式
this.nameOfController
立即计算,但“nameOfController”属性属性仅在计算整个对象文本并创建相应的对象之后创建。感谢您的响应。如何将变量nameOfController发送到超类?使用这个。callParent()?我已经编辑了我的问题,如果你看一下,我将不胜感激。@DavorLozic我不明白你的模式。为什么要从
用户
中设置
SimpleControl
的名称?因为在我的SimpleControl中,所有逻辑都是我想在所有控制器中共享的,但唯一的区别是“名称”。比如说,用户、国家、工人。。。它们都有数据库的CRUD,逻辑在任何地方都是一样的。我想就是这样。:)谢谢你的回复。如何将变量nameOfController发送到超类?使用这个。callParent()?我已经编辑了我的问题,如果你看一下,我将不胜感激。@DavorLozic我不明白你的模式。为什么要从
用户
中设置
SimpleControl
的名称?因为在我的SimpleControl中,所有逻辑都是我想在所有控制器中共享的,但唯一的区别是“名称”。比如说,用户、国家、工人。。。它们都有数据库的CRUD,逻辑在任何地方都是一样的。我想就是这样。:)谢谢你的回复,但我认为Lolo的解决方案更干净。如果他的解决方案不起作用,我就试试你的。:)谢谢你的回复,但我认为Lolo的解决方案更干净。如果他的解决方案不起作用,我就试试你的。:)谢谢你的回复。这看起来很棒。我试试看谢谢你的回复。这看起来很棒。我试试看