2011-04-09 198 views
2

我有一个漂亮的嵌套JSON来自ldap_search()调用。我想用这些信息填充一个ExtJS组合框,但是我正面临读者的一些麻烦。显然,我无法阅读我在ComboBox中需要的信息,那就是人们的邮件地址,uid和cn。我认为整个问题都在商店中。我正在尝试下面的代码:extJS:读取嵌套的JSON

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数组并且它工作正常,这就是为什么我真的认为问题在于这部分代码中,特别是在映射中。

通过search.php中返回的JSON的一个例子是:

{ 
    "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" 
    } 
} 

感谢您的时间。

+0

您正在使用哪个版本的Ext JS? – blong 2013-01-31 14:23:47

回答

3

是的,那JSON结构不会马上与标准ExtJS JSONReader一起工作。看一下这个从ExtJS API documentation中得到的关于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将是“行”。

在将它提供给JSONReader之前,您可能需要首先将您的JSON解析为更简单的格式。

+0

非常感谢!我必须研究如何将结果格式化为服务器端,并将其重新安排为更简单的JSON。现在它完美地工作。太糟糕了,JSON Reader无法直接读取ldap_search()(PHP)的结果! – Danilo 2011-04-11 13:19:30

1

我正在寻找做同样的事情,但有一个嵌套的项目是我的图表中的字段。这篇文章不断出现,所以我认为看看我做了什么来解决图表问题可能会有所帮助。解决它的关键是知道标签配置存在:http://docs.sencha.com/ext-js/4-0/#!/api/Ext.chart.Label。使用它你可以覆盖你传入的默认渲染。在这个例子中,这个字段是“key”(这里没有显示,但是我的模型使用'key'的默认类型(即。,而不是字符串))。关键对象被传递给渲染器。使用函数(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; 
      } 
     } 
    }