包含数据存储会使应用程序无法加载

时间:2011-11-20 21:13:23

标签: extjs extjs4

我无法让我的应用程序使用MVC架构。

以下是代码:

app.js

Ext.application({
    name: CONFIG.APP_NS,
    appFolder: '../js/app',
    autoCreateViewport: true,

    /*
    models: ['User'],

    stores: ['Users'],
    //*/

    controllers: ['Main', 'Tab', 'Import', 'Export', 'Predict', 'Admin']  
});

Import.js(控制器)

Ext.define(CONFIG.APP_NS+'.controller.Import', {
    extend: 'Ext.app.Controller',

    //stores: ['Users'], //Uncommenting this makes the application not load at all
    models: ['User'],
    views: ['Import.Window', 'Import.Toolbar', 'Import.Grid'],

    init: function(){
        ...
    },

    ...
});

User.js(型号)

Ext.define(CONFIG.APP_NS+'.model.User', {
    extend: 'Ext.data.Model',
    fields: [
        {name: 'id',            type: 'int'},
        {name: 'username',      type: 'string'},
        {name: 'password',      type: 'string'},
        {name: 'salt',          type: 'string'},
        {name: 'firstName',     type: 'string'},
        {name: 'lastName',      type: 'string'},
        {name: 'email',         type: 'string'},
        {name: 'admin',         type: 'boolean'},
        {name: 'authenticated', type: 'boolean'}
    ],

    hasMany: {model: CONFIG.APP_NS+'.model.Roles', name: 'roles'},

    proxy: {
        type: 'ajax',
        url: 'model/users',
        reader: {
            type: 'json'
        }
    }
});

Ext.define(CONFIG.APP_NS+'.model.Roles', {
    extend: 'Ext.data.Model',

    fields: [
        {name: 'role',          type: 'string'}
    ],

    belongsTo: CONFIG.APP_NS+'.model.User'
});

Users.js(商店)

Ext.define(CONFIG.APP_NS+'store.Users', {
    extend: 'Ext.data.Store',
    requires: CONFIG.APP_NS+'.model.User',
    model: CONFIG.APP_NS+'.model.User'
});

Grid.js(view)

Ext.define(CONFIG.APP_NS+'.view.Import.Grid', {
    extend: 'Ext.grid.Panel',
    alias: 'widget.importgrid',

    initComponent: function() {
        this.store = Ext.create('Ext.data.Store', { //Works fine with the code as it is
            model: CONFIG.APP_NS+'.model.User',
            proxy: {
                type: 'ajax',
                url: 'model/users',
                reader: {
                    type: 'json'
                }
            }
        });
        //*/
        //this.store = Ext.create(CONFIG.APP_NS+'.store.Users', {});

        this.columns = [
            {header: 'Name',  dataIndex: 'username',  flex: 1},
            {header: 'Email', dataIndex: 'email', flex: 1}
        ];

        this.callParent(arguments);

        this.store.load();
    }
});

我已经尝试了几乎所有商店的组合:在不同的文件中,似乎没有什么可以做的。如果我没有在任何地方包含商店,我会收到错误对象不是函数(或者 TypeError:如果在未定义的之外定义,则无法调用方法'<内部extjs文件中的某个地方的视图中的em> initComponent 。似乎即使我从教程示例中复制结构,它仍然不起作用,所以我必须遗漏一些东西。

我做错了什么?

感谢您的时间。

编辑:

我在Wamp(localhost)上运行此代码。服务器安装并运行了ExtJS4和Symfony。

更新了错误消息。

修正了模型中的拼写错误,请参阅评论。

2 个答案:

答案 0 :(得分:2)

(我看到你在app.js中注释了这些商店。这是故意吗?)

我遇到了类似的问题..只要我将商店添加到我的app.js和view.js(网格面板),我的应用就停止了工作。

我很确定通过将商店(所有商店)添加到控制器 app.js来修复它。好的..刚刚再次检查,如果来自controller.js的商店丢失,我会收到一条不同的错误消息:“未捕获的TypeError:无法调用未定义的方法”(这是在chrome上)。稍有不同的错误信息。

另外,考虑注释掉this.store.load()..即删除服务器数据访问变量 - (一次一件事。)

答案 1 :(得分:2)

我发现了这个错误。

Users.js(商店)

Ext.define(CONFIG.APP_NS+'store.Users', {
    extend: 'Ext.data.Store',
    requires: CONFIG.APP_NS+'.model.User',
    model: CONFIG.APP_NS+'.model.User'
});

第一行应该是:

Ext.define(CONFIG.APP_NS+'.store.Users', {

我错过 store 之前的一段时间。

Molecule Man的评论让我重新检查了所有的定义,谢谢。