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
ExtJS 4.1控制器继承,为存储和模型生成getter_Extjs_Extjs4_Extjs4.1 - Fatal编程技术网

ExtJS 4.1控制器继承,为存储和模型生成getter

ExtJS 4.1控制器继承,为存储和模型生成getter,extjs,extjs4,extjs4.1,Extjs,Extjs4,Extjs4.1,我尝试创建基本控制器并在其中写入: Ext.define('My.Users.controller.Role', { extend : 'Ext.app.Controller', stores : [ 'Modules', 'ModulesList' ], models : [ 'Modules', 'ModulesList' ] }); 但是当我尝试为它们使用getter时(在这个基类中

我尝试创建基本控制器并在其中写入:

Ext.define('My.Users.controller.Role', {
    extend      : 'Ext.app.Controller',
    stores       : [
        'Modules', 'ModulesList'
    ],
    models       : [
        'Modules', 'ModulesList'
    ]
});
但是当我尝试为它们使用getter时(在这个基类中,或者在它的子类中,比如My.Users.controller.Group),比如getModuleStore()或者getModuleListModel(),我有一个错误,它们不是函数。在Firebug中,我可以看到在子类和它的超类中没有这种方法。我怎样才能修好它

完整描述如何重现此错误: 1) 从Sencha下载ExtJS 4.1 GPL

2) 解压缩归档文件,然后转到目录extjs-4.1.0/examples/app/feed-viewer/

3) 在file feed-viewer.html注释行
中强制动态加载js文件:现在您可以正常编辑项目文件的内容

4) 在文件夹app/controller中创建名为Entities.js的文件,代码如下:

Ext.define('FV.controller.Entities', {
    extend: 'Ext.app.Controller',
    models: ['Shared'],
    stores: ['Shared']
});
5) 在文件Articles.js和Feeds.js中,更改扩展为“FV.controller.Entities”

6) 在文件夹app/model和app/store中创建包含内容的Shared.js文件

Ext.define('FV.model.Shared', {
    extend: 'Ext.data.Model',
    idProperty: 'id',
    fields: [
    {
        name: 'id',
        type: 'int'
    },
    {
        name: 'title',
        type: 'string'
    }
    ]
}); 
模型和

Ext.define('FV.store.Shared', {
    extend: 'Ext.data.Store',
    model: 'FV.model.Shared',
    proxy: {
        type: 'ajax',
        url: 'test.json',
        reader: {
            type: 'json',
            root: 'item'
        }
    }
});
为了商店

7) 最后,例如,在Article.js的init方法中,尝试console.log(this); 在Firebug中,您将无法获得getSharedModel()和getSharedStore()方法


我已将示例上载到

如果您使用的是
refs
属性,则会为视图生成getter

-查看“使用参考”部分


对于存储,只需使用
this即可。如果使用
refs
属性,则会为视图生成getter

-查看“使用参考”部分


对于商店只需使用
this.getStore('Modules')
模型和
商店
是配置属性。如果查看
Ext.app.Controller
的源代码,您将看到在构造函数中创建的getter

FV.controller.Articles
是您的控制器类固有的,但它有自己的
模型
存储
属性,这些属性将覆盖您自己基类中的属性。这与组件具有
height
config的方式非常相似,它将覆盖所有基类的配置(除非基类通过在构造函数或initComponent中覆盖它来强制这样的配置,否则使用简单配置属性的
controller
不是这种情况)

如果您想让它工作,那么控制器固有的类必须显式地将基类配置与其新配置合并。同样,与组件相同

或者(可能是更好的解决方案),不必在基类中将共享模型和存储定义为配置属性,您可以将它们合并到构造函数获得的配置中。在基本控制器类的构造函数中类似于以下内容:

Ext.merge( config, {
    models: ['Shared'],
    stores: ['Shared']
});

模型
存储
是配置属性。如果查看
Ext.app.Controller
的源代码,您将看到在构造函数中创建的getter

FV.controller.Articles
是您的控制器类固有的,但它有自己的
模型
存储
属性,这些属性将覆盖您自己基类中的属性。这与组件具有
height
config的方式非常相似,它将覆盖所有基类的配置(除非基类通过在构造函数或initComponent中覆盖它来强制这样的配置,否则使用简单配置属性的
controller
不是这种情况)

如果您想让它工作,那么控制器固有的类必须显式地将基类配置与其新配置合并。同样,与组件相同

或者(可能是更好的解决方案),不必在基类中将共享模型和存储定义为配置属性,您可以将它们合并到构造函数获得的配置中。在基本控制器类的构造函数中类似于以下内容:

Ext.merge( config, {
    models: ['Shared'],
    stores: ['Shared']
});

您的代码在我看来是正确的,因此您尝试使用的存储和模型的名称/id可能不匹配。您的代码在我看来是正确的,因此您尝试使用的存储和模型的名称/id可能不匹配。我询问的是生成的getter,而不是get(entityName)方法。@GuyFawkes生成的getter称为get,它们用于检索视图。这个答案是正确的!没有为模型生成的getter,它们仅用于动态加载。@sha要使此
this.getStore('Modules')
正常工作,您必须使用该id创建它,否则,将使用'Modules'id创建一个新的全局存储。Juan,请阅读有关为视图、模型和存储生成getter的文档。用于作为组件查询引用的引用。@GuyFawkes-看起来您是对的。应该有商店和模型的getter。我只是从来没用过。老实说,我看不出有什么意义。与视图不同,我不明白为什么要使用生成的getter而不是标准的get方法。我问的是生成的getter,而不是get(entityName)方法。@GuyFawkes生成的getter称为get,用于检索视图。这个答案是正确的!没有为模型生成的getter,它们仅用于动态加载。@sha要使此
this.getStore('Modules')
正常工作,您必须使用该id创建它,否则,将使用'Modules'id创建一个新的全局存储。Juan,请阅读有关为视图、模型和存储生成getter的文档。用于作为组件查询引用的引用。@GuyFawkes-看起来您是对的。应该有商店和模型的getter。我只是从来没用过。老实说,我看不出有什么意义。与视图不同,我不明白为什么要使用生成的getter而不是标准的get方法。解析器吃掉了我的标记:)我已经编辑了我的帖子。是的,我甚至不想覆盖我的模型和存储——我认为它会在之前创建getter