2011-04-09 143 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; 
      } 
     } 
    }