ExtJS4 - реконфигурирование сетки в ASP.NET - проблема структуры JSON - PullRequest
0 голосов
/ 20 марта 2012

Одной из функций безопасности ASP.NET оказывается гора для масштабирования здесь - добавление свойства "d" при возврате ответа JSON, кажется, сбивает с толку ExtJS, когда я пытаюсь динамически перенастроить панель сетки, вызывая ее сбой припытаясь сгенерировать новую структуру столбцов.

Я следовал этому решению по nicholasnet: http://www.sencha.com/forum/showthread.php?179861-Dynamic-grid-columns-store-fields

, и он прекрасно работает, пока полезная нагрузка JSON не будет обернута вокруг свойства "d",Например,

{"d":{
    "metaData": {
        "root": "data",
        "fields": [{
            "type": "int",
            "name": "id",
            "hidden": true,
            "header": "id",
            "groupable": false,
            "dataIndex": "id"
        }, ...omitted for brevity...]
    },
    "success": true,
    "data": [{
        "id": "1",
        "controller": "Permissions",
        "description": "Allow to see permission by roles",
        "administrator": true,
        "marketing": false
    }]
  }  
}

Я не могу понять, как сказать ExtJS обойти эту проблему. Я попытался установить для свойства "root" средства чтения AJAX значение "d.data", но в результате в сетке отображается правильное количество строк, но вообще нет данных.

I 'Мы все дескрипторы свойств, необходимые для метаданных столбца ("name", "header", "dataIndex") в JSON, поэтому я не считаю, что причиной является структура JSON.Мое главное преимущество на данный момент заключается в том, что в обработчике событий:

    store.on
({
    'load' :
    {
         fn: function(store, records, success, operation, eOpts)
        {
            grid.reconfigure(store,store.proxy.reader.fields);
        },
        scope: this
   }
},  this);  

Часть fields в historyStore.proxy.reader.fields не определена, когда я передаю JSON в D-образной оболочке.Кто-нибудь есть какие-либо идеи о том, почему это или как решить эту проблему?

редактировать: мой магазин / прокси

Ext.define('pr.store.Store-History', {
    extend: 'Ext.data.Store',
    model: 'pr.model.Model-History',
    proxy: {

        type: 'ajax',
        url: '/data/history.json',
        reader: {
            type: 'json',
            root: 'd'
        }
}
});

1 Ответ

1 голос
/ 20 марта 2012
Ext.define('pr.store.Store-History', {
    extend: 'Ext.data.Store',
    model: 'pr.model.Model-History',
    proxy: {

        type: 'ajax',
        url: '/data/history.json',
        reader: {
            type: 'json',
            root: 'data',
            readRecords: function(data) {
                //this has to be before the call to super because we use the meta data in the superclass readRecords
               var rootNode = this.getRoot(data);
               if (rootNode.metaData) {
                   this.onMetaChange(rootNode.metaData);   // data used to update fields
               }

              /**
               * @deprecated will be removed in Ext JS 5.0. This is just a copy of this.rawData - use that instead
               * @property {Object} jsonData
               */
              this.jsonData = rootNode;
              return this.callParent([rootNode]);    // data used to get root element and then get data from it
          },
        }
    }
});

Обновление: вы не получаете поля в считывателе, потому что код по умолчанию для получения полей из данных не обрабатывает ваши упакованные данные, поэтому вам нужно изменить функцию 'readRecords', чтобы обрабатывать вашипользовательские данные

...