проблема отображения модели с подмассивом для панели сетки extjs 4 - PullRequest
0 голосов
/ 28 марта 2012

участников форума У меня возникли проблемы с отображением данных json в мою модель

мои данные json, которые я получаю, приведены ниже

{
    "companydata": [{
        "cmpname": "Kintu Designs Pvt ltd.",
        "cmptitle": "Kintu Designs Pvt ltd.",
        "cmpdesc": "<b>Kintu Designs Pvt ltd.</b>",
        "cmpfax": "8128812153",
        "cmpcontact": "8128812153",
        "cmpwebsite": "www.kintudesigns.com",
        "cmpemail1": "yaryan997@gmail.com",
        "cmpemail2": "yaryan997@gmail.com",
        "cmpcountry": "India",
        "cmpstate": "Gujarat",
        "cmpcity": "Surat",
        "cmpaddress": "Kintu Designs Pvt ltd. Nanpura Surat",
        "departments": [{
            "departname": "Programmers",
            "departdescr": "<b>?Programmers</b>",
            "createdby": 1,
            "createdon": 1200022207000,
            "modifiedon": 1200022207000,
            "modifiedby": 1,
            "id": 1
        }],
        "cmplogo": "calendar.png",
        "cmplogopath": "upload/images/",
        "cmpcreatedby": 1,
        "cmpcreatedon": 1200011900000,
        "cmpmodifiedon": 1200011900000,
        "cmpmodifiedby": 0,
        "id": 1
    }],
    "total": 1,
    "success": true
}

моя модель компании

Ext.define('rms.model.companyModel', {
    extend: 'Ext.data.Model',
    fields : [
              { name: 'id', type: 'int', useNull: true, mapping: 'id'},
              { name: 'cmpname', type: 'string', mapping: 'cmpname'},
              { name: 'cmptitle', type: 'string', mapping: 'cmptitle'},
              { name: 'cmpdesc', type: 'string', mapping: 'cmpdesc'},
              { name: 'cmpfax', type: 'string', mapping: 'cmpfax'},
              { name: 'cmpcontact', type: 'string', mapping: 'cmpcontact'},
              { name: 'cmpwebsite', type: 'string', mapping: 'cmpwebsite'},
              { name: 'cmpemail1', type: 'string', mapping: 'cmpemail1'},
              { name: 'cmpemail2', type: 'string', mapping: 'cmpemail2'},
              { name: 'cmpcountry', type: 'string', mapping: 'cmpcountry'},
              { name: 'cmpstate', type: 'string', mapping: 'cmpstate'},
              { name: 'cmpcity', type: 'string', mapping: 'cmpcity'},
              { name: 'cmplogo', type: 'string', mapping: 'cmplogo'},
              { name: 'cmplogopath', type: 'string', mapping: 'cmplogopath'},
              { name: 'cmpaddress', type: 'string', mapping: 'cmpaddress'},

              { name: 'departname', type: 'string', mapping: 'departments.departname'},
              { name: 'departdescr', type: 'string', mapping: 'departments.departdescr'},
          ]
});

, но я все еще не могу показать название отдела на своей сетке. Моя сеточная панель имеет код, указанный ниже

Ext.define('rms.view.companymgt.companyDetail', {
    extend: 'Ext.grid.Panel',
    alias: 'widget.companydetail',
    id: 'companydetail',
    itemId: 'companydetail',
    store: 'company',
    forceFit: true,
    frame: true,
    initComponent: function() {
        var me = this;


        Ext.applyIf(me, {
            viewConfig: {


            },
            columns: [{xtype: 'rownumberer', width: 40},
                {
                    xtype: 'gridcolumn',
                    dataIndex: 'cmptitle',
                    text: 'Company Title'
                },
                {
                    xtype: 'gridcolumn',
                    dataIndex: 'departname',
                    text: 'Department Name'
                }
        });


        me.callParent(arguments);
    }
});

моя сеточная панель правильно отображает название компании, но имя отправления не отображается на сеточной панели.

Пожалуйста, предложите мне, что не так в моем коде выше.

1 Ответ

0 голосов
/ 28 марта 2012

Ну, во-первых, ваш атрибут отделов в json возвращает массив отделов, поэтому вы не можете сопоставить его с именемpartmens.departname.Если у вас есть только один отдел (я полагаю, потому что в противном случае вы не можете использовать сопоставление), вы можете изменить json, чтобы иметь только объект внутри отделов и использовать сопоставление.

Другое решение заключается в сопоставлении с полем отделов вВаш магазин и сохраните объект внутри этого поля {имя: «отделы», отображение: «отделы»},

{
                    xtype: 'gridcolumn',
                    dataIndex: 'departname',
                    text: 'Department Name',
                    renderer: function(value){
                      //if you leave your json like you curently have it 
                      return value[0].departname;
                      //or if you have only a department object
                      return value.departname;
                    }
                }
...