2017-09-19 1 views
0

저는 store.load()으로 전화하지만 treepanel은 첫 번째 레벨 (모델 ProcessVedDoc 모델) 만 표시합니다. load 메소드에 콜백을 추가하면 레코드에 빈 childNodes가 표시됩니다. 데이터에 자식이 있지만 모델 VedDoc에 매핑되지 않은 개체가 있습니다. 무엇이 잘못 될 수 있습니까? screenshot from firefox dev toolsExtJS Treepanel에 어린이가 표시되지 않습니다

모델

Ext.define('Proj.model.ProcessVedDoc', { 
extend: 'Ext.data.Model', 
fields: [ 
    {name: "text", mapping: 'name'}, 
    {name: "expanded", type: "boolean", defaultValue: true}, 
    {name: "loaded", type: "boolean", defaultValue: true} 
}], 
requires : ['Proj.model.VedDoc'], 
hasMany: [{ 
    model: 'Proj.model.VedDoc', 
    associationKey : 'children', 
    name: 'children' 
}]}); 

Ext.define('Proj.model.VedDoc', { 
extend: 'Ext.data.Model', 
fields: ['id', 
    {name: 'text', mapping: 'name'}, 
    {name: 'leaf', type: 'boolean', defaultValue: true, persist: false}], 
idProperty: 'id'}); 

스토어

Ext.define('Proj.store.VedDocsTreeStore', { 
extend: 'Ext.data.TreeStore', 
model: 'Proj.model.ProcessVedDoc', 
autoLoad: false, 
autoSync: false, 
root: { 
    expanded: true 
}, 
proxy: { 
    type: 'ajax', 
    url: 'portfolios/veddocs', 
    getParams: Ext.emptyFn, 
    timeout: 300000, 
    reader: {type: 'json', root: 'docs'} 
}}); 

보기

{ 
     xtype: 'treepanel', 
     title: 'Documents', 
     name: 'vedDocs', 
     margin: '15 0 0 0', 
     width: 650, 
     height: 350, 
     rootVisible: false, 
     store: vdocs 
    } 

JSON

{ 
"docs": [{ 
    "name": "15a1dc1515aa151eea556", 
    "children": [ 
     {"name": "Doc1", "id": "bf4e2776-1089-445f-98dd-e5e8fe5c798f"}, 
     {"name": "Doc2", "id": "1312bba6-9d05-4aa5-b069-b2958043c2a5"}, 
     {"name": "Doc3, "id": "49a045cf-b5cf-4478-b886-f078e6a48753"}] 
}, 
{ 
    "name": "15a1dc18515bb515aa151556", 
    "children": [ 
     {"name": "Doc1", "id": "3cef1250-fd35-4ff6-bbbf-33e4c59d4767"}, 
     {"name": "Doc2", "id": "a43ffa24-ed25-4fc7-80a5-f4b1a78b666e"}] 
}], 
"success": true} 
+0

나는 ** 잎 ** 속성을 놓쳤다 고 생각합니다. [ExtJs tree docs] (https://docs.sencha.com/extjs/6.0.2/guides/components/trees.html)를 참조하십시오. –

+0

답변 해 주셔서 감사합니다. 이 필드는 모델 ExtJs (VedDoc)에 있습니다. 나는 json을 바꿨다. '잎'을 추가하고 '이름'-> '텍스트'로 이름을 변경했습니다. 문제가 여전히 존재합니다. '{ "text": "Doc1", "id": "7813eb3c-57f9-4f39-aefc-af4860441189", "leaf": true}' – Aleksey

답변

1

treepanel 루트가 children 객체를 이해하기 때문에이 형식으로 응답 해보십시오.

JSON 형식

{ 
    "success": true, 
    "children": [{ 
     "text": "15a1dc1515aa151eea556", 
     "expanded": true, 
     "children": [{ 
      "text": "Doc1", 
      "leaf": true, 
      "id": "bf4e2776-1089-445f-98dd-e5e8fe5c798f" 
     }, { 
      "text": "Doc2", 
      "leaf": true, 
      "id": "1312bba6-9d05-4aa5-b069-b2958043c2a5" 
     }, { 
      "text": "Doc3", 
      "leaf": true, 
      "id": "49a045cf-b5cf-4478-b886-f078e6a48753" 
     }] 
    }, { 
     "text": "15a1dc18515bb515aa151556", 
     "expanded": true, 
     "children": [{ 
      "text": "Doc1", 
      "leaf": true, 
      "id": "3cef1250-fd35-4ff6-bbbf-33e4c59d4767" 
     }, { 
      "text": "Doc2", 
      "leaf": true, 
      "id": "a43ffa24-ed25-4fc7-80a5-f4b1a78b666e" 
     }] 
    }] 
} 

는 ExtJS Treepanel 및 저장 코드는

나는 데모를 만들었습니다. 당신은 * 당신이 setRoot의 ({루트 개체})를 사용하여 저장소에 전단 측과로드 데이터 treedata 형식을 만들 수 있습니다 여기에 Sencha Fiddle

var store = Ext.create('Ext.data.TreeStore', { 
    autoLoad: true, 
    autoSync: false, 
    root: { 
     expanded: true 
    }, 
    proxy: { 
     type: 'ajax', 
     url: 'veddocs.json', 
     timeout: 300000, 
     reader: { 
      type: 'json', 
      root: 'children' 
     } 
    } 
}); 

Ext.create('Ext.tree.Panel', { 
    title: 'Simple Tree', 
    width: 200, 
    height: 150, 
    store: store, 
    rootVisible: false, 
    renderTo: Ext.getBody() 
}); 

참고를 확인합니다. 자세한 내용은 Extjs Store Docs

+0

고맙습니다. 그것은 일이다. 문제가 첫 번째 수준의 어린이 이름이 잘못되었습니다. – Aleksey

+0

대부분 환영합니다. :) –

관련 문제