extJS: чтение вложенного JSON - PullRequest
2 голосов
/ 09 апреля 2011

У меня довольно вложенный JSON, полученный из вызова ldap_search ().Я хотел бы использовать эту информацию для заполнения ExtJS ComboBox, но я столкнулся с некоторыми проблемами с читателем.Видимо, я не могу прочитать информацию, которая мне нужна, в ComboBox, то есть почтовый адрес людей, uid и cn

Я думаю, что вся проблема заключается в магазине.Я пробовал следующий код:

var store= new Ext.data.JsonStore({
        url:'search.php',   
        root: '',
        totalProperty: 'count',
        fields: [
            {name:'cn', type: 'string', mapping:'cn.0'},
            {name:'mail', type: 'string', mapping:'mail.0'},
            {name:'uid', type: 'string', mapping:'uid.0'}
        ]
});

, но FireBug сказал мне missing ; before statement return obj.cn.0 in ext-all.js (line 7).Я попытался с другим, более простым массивом JSON, и он работает, поэтому я действительно считаю, что проблема заключается в этой части кода, особенно в отображении.1009 *

{
  "count": 2,
  "0": {
    "mail": {
      "count": 1,
      "0": "Mail address not registered."
    },
    "0": "mail",
    "uid": {
      "count": 1,
      "0": "name0.surname0@domain.com"
    },
    "1": "uid",
    "cn": {
      "count": 1,
      "0": "Surname0 Name0"
    },
    "2": "cn",
    "count": 3,
    "dn": "cn=Surname0 Name0,ou=personal,dc=domain,dc=com"
  },
  "1": {
    "mail": {
      "count": 1,
      "0": "name1.surname1@domain.com"
    },
    "0": "mail",
    "uid": {
      "count": 1,
      "0": "name1.surname1"
    },
    "1": "uid",
    "cn": {
      "count": 1,
      "0": "Surname 1 Name 1"
    },
    "2": "cn",
    "count": 3,
    "dn": "cn=Surname1 Name1,ou=personal,dc=domain,dc=com"
  }
}

Спасибо за ваше время.

Ответы [ 2 ]

3 голосов
/ 09 апреля 2011

Да, эта структура JSON не будет работать сразу со стандартным ExtJS JSONReader.Посмотрите на этот пример, взятый из документации API ExtJS о том, как должен выглядеть JSON.

{
    results: 2000, // Reader's configured totalProperty
    rows: [        // Reader's configured root
        // record data objects:
        { id: 1, firstname: 'Bill', occupation: 'Gardener' },
        { id: 2, firstname: 'Ben' , occupation: 'Horticulturalist' },
        ...
    ]
}

Также требуется опция конфигурации root, вы не можете оставить еепустой.В приведенном выше примере ваш root будет «строк».

Возможно, вам сначала потребуется проанализировать ваш JSON в более простой формат, прежде чем передавать его в JSONReader.

1 голос
/ 16 марта 2012

Я хотел сделать то же самое, но один из вложенных элементов должен быть полем в моем графике. Этот пост продолжал появляться, поэтому я подумал, что было бы полезно посмотреть, что я сделал, чтобы решить проблему с графиком. Ключом к решению этой проблемы является знание того, что конфигурация метки существует: http://docs.sencha.com/ext-js/4-0/#!/api/Ext.chart.Label. С ее помощью вы можете переопределить стандартную визуализацию того, что вы передаете. В этом примере это поле "ключ" (здесь не показано, но моя модель использует тип по умолчанию для «ключа» (т. е. не строка)). Ключевой объект передается рендереру. Используя функцию (t), теперь я могу получить доступ к этому объекту, например, к javascript, и вернуть имя под объектом.

 json
    key : { 
            wholePath : "c:/.../fileName.txt",
            fileName : "fileName.txt",
        }
  code:
    axes: [
    {
        title: 'Values',
        type: 'Numeric',
        position: 'left',
        fields: ['value'],
        minimum: 0,
        maximum: 100,
        minorTickSteps: 1
    },
    {
        title: 'File Name',
        type: 'Category',
        position: 'bottom',
        fields: ['key'],
        label: {
            renderer: function(t) {
               var fileName = t.name;
               return fileName;
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...