【问题标题】:Extjs Not Showing data from storeExtjs不显示来自商店的数据
【发布时间】:2011-12-02 00:16:28
【问题描述】:

我正在学习 Extjs 并尝试遵循本教程 http://www.sencha.com/learn/the-mvc-application-architecture/ 一切顺利.. 但是,当我继续“创建模型和商店”并按照教程中的内容进行操作时,请运行它。 它给出错误:未捕获的类型错误:无法读取未定义的属性“项目” 有什么我错过了吗? 谢谢

/app/controller/User.js

Ext.define('AM.controller.Users', {
    extend: 'Ext.app.Controller',
    stores: [
        'Users'],
    models: ['User'],
    views: [
        'user.List',
        'user.Edit'],
    init: function () {
        this.control({
            'viewport > panel': {
                render: this.onPanelRendered
            },
            'userlist': {
                itemdblclick: this.editUser
            }
        });
    },

    editUser: function (grid, record) {
        var view = Ext.widget('useredit');

        view.down('form').loadRecord(record);
    },
    onPanelRendered: function () {
        console.log('panel rendered');
    }
})

/app/model/User.js

Ext.define('AM.model.User', {
    extend: 'Ext.data.Model',
    fields: ['name', 'email']
});

/app/store/Users.js

Ext.define('AM.store.Users', {
    extend: 'Ext.data.Store',
    model: 'AM.model.User',

    data: [
        {name: 'Ed',    email: 'ed@sencha.com'},
        {name: 'Tommy', email: 'tommy@sencha.com'}
    ]
});

/app/view/user/Edit.js

Ext.define('AM.view.user.Edit', {
    extend: 'Ext.window.Window',
    alias : 'widget.useredit',

    title : 'Edit User',
    layout: 'fit',
    autoShow: true,

    initComponent: function() {
        this.items = [
            {
                xtype: 'form',
                items: [
                    {
                        xtype: 'textfield',
                        name : 'name',
                        fieldLabel: 'Name'
                    },
                    {
                        xtype: 'textfield',
                        name : 'email',
                        fieldLabel: 'Email'
                    }
                ]
            }
        ];

        this.buttons = [
            {
                text: 'Save',
                action: 'save'
            },
            {
                text: 'Cancel',
                scope: this,
                handler: this.close
            }
        ];

        this.callParent(arguments);
    }
});

/app/view/user/List.js

Ext.define('AM.view.user.List',{
    extend: 'Ext.grid.Panel',
    alias: 'widget.userlist',
    store: 'Users',
    title: 'All users',

});

/myapp.js

Ext.application({
    name: 'AM',

    controllers : ['Users'],
    appFolder: 'app',

    launch: function() {
        Ext.create('Ext.container.Viewport', {
            layout: 'fit',
            items: [
                {
                    xtype: 'userlist',
                }
            ]
        });
    }
});

/index.html

<!DOCTYPE HTML>
<html>
    <head>
        <link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css" />
        <script type="text/javascript" src="extjs/ext-debug.js"></script>
        <script type="text/javascript" src="myapp.js"></script>
    </head>
    <body>
        Loading apps.........
    </body>
</html>

Extjs 库位于 /extjs

【问题讨论】:

  • 为什么不在您的 extjs 提取目录上指向 examples/app/simple,这与您想要实现的目标相同,但有一个问题。我得到了这个问题的解决方案作为下面的答案。

标签: javascript extjs model store


【解决方案1】:

就像基于语法的注释一样,在 myapp.js 文件中的“用户列表”之后以及 List.js 文件中的“所有用户”之后都有一个额外的逗号。

此外,在该教程的 cmets 中,参考了类似的问题,解决方法是:

为“列表”视图定义“列”属性

尝试将此添加到您的列表中:

columns: [
    {header: 'Name',  dataIndex: 'name'},
    {header: 'Email', dataIndex: 'email'}
]

【讨论】:

  • 遇到了同样的问题,添加列也对我有用。我有 ExtJS 4.0.7,我想知道这是否在 4.1 中修复
【解决方案2】:

好吧,你想试试 sencha mvc 例子@examples/app/simple 这个例子有一个错误,因为需要在应用程序启动时显式加载Ext.container.Viewport

launch: function() {
        Ext.create('Ext.container.Viewport', { //this line do explicit load on Viewport class 

所以要解决这个问题,你需要在第一行的myapp.js 上多写一行

Ext.Loader.setConfig({enabled:true}); //need to enable dynamically load the Ext.container.Viewport
Ext.application({
    name: 'AM',

    //paths direct to the Ext src path folder i.e given here if accessed from http://localhost/ext/examples/app/simple/simple.html
    paths: {
        'Ext': '../../../src/' 
    },
    controllers: [
        'Users'
    ],
....

【讨论】:

  • 控制台给我未捕获的类型错误:无法读取未定义的属性“项目”。但上面之前的答案解决了它。
猜你喜欢
  • 1970-01-01
  • 2014-09-06
  • 2012-08-29
  • 2011-09-11
  • 1970-01-01
  • 2013-02-03
  • 2021-07-14
  • 2011-12-24
  • 1970-01-01
相关资源
最近更新 更多