如何在 extjs4 的网格中显示关联的 json 数据?

Posted

技术标签:

【中文标题】如何在 extjs4 的网格中显示关联的 json 数据?【英文标题】:How to display associated json data in grid in extjs4? 【发布时间】:2013-04-12 11:45:26 【问题描述】:

我在 extjs4 mvc 中工作,我遇到了一些问题。实际上我想在 extjs4 的网格中显示关联的 json 数据。我尝试并搜索了很多,但仍未解决问题。

这是我的一些代码

    我的视图文件:

    Ext.define('AM.view.user.List' ,
        extend: 'Ext.grid.Panel',
        alias : 'widget.userlist',
        title : 'All Users',
        store: 'Users',
        columns: [
            header: 'Name',  dataIndex: 'name',  flex: 1,
            header: 'Email', dataIndex: 'email', flex: 1,
            header:'title',dataIndex:'title',flex:1       //I tried 
        ]
     );
    

    控制器文件:

    Ext.define('AM.controller.Users', 
        extend: 'Ext.app.Controller',
        stores: ['Users'],
        models: ['User','Book'],
        views: ['user.Edit', 'user.List'],
        refs: [
            ref: 'usersPanel',
            selector: 'panel'
        ],
        init: function() 
    
         this.control(
                 'viewport > userlist dataview': 
                     itemdblclick: this.editUser
                 ,
                 'useredit button[action=save]': 
                     click: this.updateUser
                 
             );
    
        
    );
    

    用户模型文件:

     Ext.define('AM.model.User', 
        extend: 'Ext.data.Model',
    fields: ['id', 'name', 'email'],
    hasMany: 
        model: 'AM.model.Book',
        //model: 'Book', 
        foreignKey: 'userId', 
        name: 'books'
    ,
    proxy: 
        type: 'ajax',
        api: 
            read: 'data/users.json',
            update: 'data/updateUsers.json'
        ,
        reader: 
            type: 'json',
            root: 'users',
            successProperty: 'success'
        
    
    );
    

    用户存储文件:--

    Ext.define('AM.store.Users', 
       extend: 'Ext.data.Store',
       model: 'AM.model.User',
       autoLoad: true
    );
    

    书籍模型文件:

    Ext.define('AM.model.Book',
        extend: 'Ext.data.Model',
        fields: [
            name: 'id', type: 'int',
            name: 'title', type: 'string', //,mapping:'record[0].title'    not working
            name: 'userId', type: 'int'
        ]     
    );
    

    json 文件:

    
    "success": "true",
    "users": [
        
            "id": "1",
            "name": "shilpa",
            "email": "shilpa@sencha.com",
            "books": [
                
                    "id": "10",
                    "title": "c++",
                    "userId": "1"
                
            ]
        
    ]
    
    

    这里是截图:

请给我一些建议以在网格中显示相关数据。

【问题讨论】:

您只想显示第一本书的标题?您是希望显示所有相关书籍的标题,以逗号分隔,还是使用两个不同的网格,当您在第一个网格中选择用户时,它会在第二个网格中显示所有相关书籍。 我只是想显示所有相关书籍的标题,用逗号分隔。 【参考方案1】:

您可以访问列渲染器中的所有书籍并构造您需要的字符串。应该是这样的:


    text: 'Books',
    renderer: function (val, meta, record) 
        var books = '';
        record.books().each(function(bookRecord, index, count) 
            books = books + bookRecord.get('title') + ',';
        );
        return books;
    

http://jsfiddle.net/alexrom7/YQXC8/1/

【讨论】:

以上是关于如何在 extjs4 的网格中显示关联的 json 数据?的主要内容,如果未能解决你的问题,请参考以下文章

Extjs 4,如何使用单个 Json 文件为多个动态网格发送多个元数据

如何在 extjs4 中使用 tpl 显示嵌套的 json

如何在具有嵌套数据的网格中设置组合框值? Extjs 4.2 Mvc

在 ExtJS4 TreeGrid 中加载嵌套的 JSON 数据

Extjs 4.1 - 如何在网格面板中显示 html 数据

如何使用extjs4.1在网格中按降序对带有连字符的浮点值进行排序