2014-04-24 6 views
0

아래의 구성으로 트리 패널에 json 데이터를 채울 수 없습니다.JSON 데이터가 extjs 4.2.x의 트리 패널에 채워지지 않습니다.

서버에서 저장소를로드 한 후 콘솔 로그의 레코드를 볼 수 없습니다.

특정 json 구조가 서버에서 전송되어야합니까?

구성이 누락 되었습니까? 다음은

은 내가 사용하고있는 설정이다

모델

Ext.define('nsoapp.model.nso.Client', { 
    extend: 'Ext.data.Model', 

    requires: [ 
     'Ext.data.Field' 
    ], 

    fields: [ 
     { 
      name: 'jsxid' 
     }, 
     { 
      name: 'name' 
     }, 
     { 
      name: 'type' 
     }, 
     { 
      name: 'countryId' 
     }, 
     { 
      name: 'contact' 
     }, 
     { 
      name: 'email' 
     } 
    ] 
}); 

STORE

Ext.define('nsoapp.store.nso.Client', { 
    extend: 'Ext.data.TreeStore', 

    requires: [ 
     'nsoapp.model.nso.Client', 
     'Ext.data.proxy.Ajax', 
     'Ext.data.reader.Json' 
    ], 

    constructor: function(cfg) { 
     var me = this; 
     cfg = cfg || {}; 
     me.callParent([Ext.apply({ 
      model: 'nsoapp.model.nso.Client', 
      storeId: 'nso.Client', 
      defaultRootProperty: 'record', 
      proxy: { 
       type: 'ajax', 
       url: '/client/', 
       reader: { 
        type: 'json', 
        root: 'populateClientRes' 
       } 
      } 
     }, cfg)]); 
    } 
}); 

트리 패널

,
xtype: 'treepanel', 
    flex: 1, 
    margins: '0 0 3 0', 
    itemId: 'treeClient', 
    overlapHeader: false, 
    title: 'Clients', 
    titleCollapse: false, 
    animate: true, 
    displayField: 'name', 
    rootVisible: false, 
    viewConfig: { 
     rootVisible: false 
    } 
는 내가 나무 패널에 나무 저장소를 결합하고 컨트롤러에서

var storeClient=this.getStore('nso.ordermanagement.clientcustomization.Client'); 
storeClient.load({ 
callback: function(records, operation, success) { 
var treeClient=Ext.ComponentQuery.query("#treeClient")[0]; 
treeClient.bindStore(storeClient); 
} 
}); 

JSON 데이터

{ 
    "populateClientRes":{ 
    "record":[ 
     { 
     "name":"A_KPI", 
     "type":"CLIENT", 
     "jsxid":"14487361", 
     "countryId":"484", 
     "contact":"34434334", 
     "email":"", 
     "record":[ 
      { 
      "name":"Products", 
      "value":"1", 
      "type":"PRODUCT" 
      }, 
      { 
      "name":"Stores", 
      "value":"1", 
      "type":"STORE" 
      } 
     ] 
     }, 
     { 
     "name":"aCCStudyTest", 
     "type":"CLIENT", 
     "jsxid":"14425073", 
     "countryId":"484", 
     "contact":"1234567890", 
     "email":"", 
     "record":[ 
      { 
      "name":"Products", 
      "value":"1", 
      "type":"PRODUCT" 
      }, 
      { 
      "name":"Stores", 
      "value":"1", 
      "type":"STORE" 
      } 
     ] 
     } 
    ] 
    } 
} 

답변

0

짧은 답변 : JSON 응답은 잘못입니다!

긴 대답

당신은 populateClientRes 그래서 모든 어린이 (어린이의 아이들) 루트로 지정이 태그를 사용해야합니다.

표준 JSON 응답 : 모든 비 리프

{ 
    "success": true, 
    "populateClientRes": [ 
     { 
      "name":"A_KPI", 
      "type":"CLIENT", 
      "jsxid":"14487361", 
      "countryId":"484", 
      "contact":"34434334", 
      "email":"", 
      "populateClientRes": [ 
       { 
        ...   
       }, { 
        ... 
        populateClientRes: [{...},{...}] 
       }, 
      ] 
     }, 
     { 
      ... 
     } 
    ] 
} 

주의 사항 : 귀하의 경우

{ 
    "success": true, 
    "children": [ 
     { 
      "id": 1, 
      "name": "Phil", 
      "leaf": true 
     }, 
     { 
      "id": 2, 
      "name": "Nico", 
      "expanded": true, 
      "children": [ 
       { 
        "id": 3, 
        "name": "Mitchell", 
        "leaf": true 
       } 
      ]}, 
     { 
      "id": 4, 
      "name": "Sue", 
      "loaded": true 
     } 
    ] 
} 

당신은 populateClientRes기록를 교체해야 c가없는 노드 hildren (예를 들어 위의 이름이 Sue 인 Person) 서버 응답은 loaded 속성을 true로 설정해야합니다. 그렇지 않은 경우 프록시는 확장 될 때이 노드에 대해 하위 노드를로드하려고 시도합니다.

당신은 자세한 내용의 here

+0

감사 보스 :) 찾을 수 있습니다. 나는 레코드 기록으로 이름을 지키는 것이 도움이된다고 생각했습니다. 그러나 나는 그것을 단지 아이들로 줄 수밖에 없습니다. – Ashish

+0

문제 없음;) 내가 이해할 수없는 또 다른 이유는 '드문 방식'으로 상점을 묶는 이유입니다. * store : "클라이언트"*를 treepanel 구성에 추가하면 괜찮습니다. 하지만 작동하는 한 괜찮습니다 =) – harry

+0

구성에서 저장소를 바인드하면 트리 패널이 자동으로 서버에서 렌더링 할 때 데이터를 얻으려고하므로 필요하지 않습니다. 그게 컨트롤러에서 이것을 묶는 이유입니다.어떤 방법으로 설정을 저장하고 rootVisible을 선택 취소 할 수 있습니까? – Ashish