1

私は extjs4 mvc で作業しており、ある時点で立ち往生しています。実はextjs4で関連するjsonデータをグリッドに表示したいのです。私はたくさん試して検索しましたが、まだ問題は解決していません。

ここに私のいくつかのコードがあります

  1. 私のビューファイル:

    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 
        ]
     });
    
  2. コントローラ ファイル:

    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
                 }
             });
    
        }
    });
    
  3. ユーザー モデル ファイル:

     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'
        }
    }
    });
    
  4. ユーザーストアファイル:--

    Ext.define('AM.store.Users', {
       extend: 'Ext.data.Store',
       model: 'AM.model.User',
       autoLoad: true
    });
    
  5. 書籍モデル ファイル:

    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'}
        ]     
    });
    
  6. json ファイル:

    {
    "success": "true",
    "users": [
        {
            "id": "1",
            "name": "shilpa",
            "email": "shilpa@sencha.com",
            "books": [
                {
                    "id": "10",
                    "title": "c++",
                    "userId": "1"
                }
            ]
        }
    ]
    }
    
  7. スクリーンショットは次のとおりです。

ここに画像の説明を入力

関連データをグリッドに表示するための提案を教えてください。

4

1 に答える 1

3

列レンダラーですべての本にアクセスして、必要な文字列を作成できます。次のようになります。

{
    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/

于 2013-04-12T13:50:39.113 に答える