extJS: чтение вложенного JSON
У меня есть довольно вложенный JSON, исходящий из вызова ldap_search (). Я хотел бы использовать эту информацию для заполнения ComboBox ExtJS, но у меня возникли некоторые проблемы с читателем. По-видимому, я не могу прочитать информацию, которая мне нужна в 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'}
]
});
Но поджигатель рассказал мне missing ; before statement return obj.cn.0 in ext-all.js (line 7). Я попробовал использовать другой, более простой массив JSON и это работает, поэтому я действительно думаю, что проблема заключается в этой части кода, особенно в отображении.
Пример JSON, возвращаемого поиском.php это:
{
"count": 2,
"0": {
"mail": {
"count": 1,
"0": "Mail address not registered."
},
"0": "mail",
"uid": {
"count": 1,
"0": "[email protected]"
},
"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": "[email protected]"
},
"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 ответов:
Да, эта структура JSON не будет работать сразу со стандартными ExtJS
JSONReader. Взгляните на этот пример, взятый из документацииExtJS API о том, как должен выглядеть 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' }, ... ] }Кроме того, требуется опция
rootconfig, вы не можете оставить ее пустой. В приведенном выше примере Вашrootбудет "строки".Вам, вероятно, придется сначала разобрать этот ваш JSON в более простой формат, прежде чем передавать его в JSONReader.
Я хотел сделать то же самое, но чтобы один из вложенных элементов был полем в моей диаграмме. Этот пост продолжал появляться, поэтому я подумал, что было бы полезно посмотреть, что я сделал, чтобы решить проблему с диаграммой. Ключ к ее решению-знать, что конфигурация метки существует: 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; } } }
Comments