2012-07-24 4 views
0

Мне нужно, чтобы панель элементов Extjs Tree с динамическими удаленными данными (JSON) для перечисления файлов.Extjs 4, Dynamic Tree и повторное отображение хранилища

и имя поля даты не подходит для поля хранения дерева Extjs. поэтому мне нужно переназначить, чтобы подгонять, например добавить поле листа и текстовое поле.

возвращение JSON данные, как это:

[{ 
    "id":1, 
    "yourRefNo":"A91273", 
    "documentName":"Test Document", 
    "documentFileName":"login_to_your_account-BLUE.jpg", 
    "updatedBy":"root root", 
    "updatedAt":"\/Date(1343012244000)\/" 
}] 

и это дерево панель:

Ext.define('App.view.Document.DocumentList', { 
    extend :'Ext.tree.Panel', 
    rootVisible : false, 
    alias: 'widget.Document_list', 
    store: 'DocumentList_store' 

}); 

и это магазин:

Ext.define('App.store.DocumentList_store', { 
    extend: "Ext.data.TreeStore", 
    model: 'App.model.DocumentList_model', 
    proxy: { 
     type: 'ajax', 
     url: '/Document/GetDocumentList/', 
     actionMethods: { 
      read: 'POST' 
     }, 
     reader: { 
      type: 'json', 
      root: '' // there is no root 
     }, 
     pageParam: undefined, 
     startParam: undefined, 
     pageParam: undefined 
    }, 
    root: { 
     children: [] 
    }, 
    autoLoad: false, 
    listeners: { 
     append: function (thisNode, newChildNode, index, eOpts) { 
      console.log(newChildNode.get('documentName')); // 'Test Document' 
      newChildNode.set('leaf', true); 
      newChildNode.set('text', newChildNode.get('documentName')); 
      // it does not add to tree panel. 

     } 
    } 
}); 

после загрузки данных из сервер, и он хорошо вызывает функцию добавления. но после этого в панели дерева ничего не отображается.

Что я делаю неправильно? пожалуйста, советую мне.

Благодаря

[EDIT]

Это модель,

Ext.define("App.model.DocumentList_model", { 
    extend: "Ext.data.Model", 
    fields: [ 
     'id','yourRefNo','documentName','documentFileName','updatedBy','updatedAt' 
    ] 
}); 
+0

Есть несколько вещей, которые могут пойти не так с вашим кодом. Было бы полезно увидеть, как ваше определение модели дает вам полный ответ. Но на данный момент, я думаю, вы игнорируете тот факт, что хранилище деревьев обертывает ваши узлы с помощью 'NodeInterface'. Учитывая это, возвращаемый json недействителен с деревом. Для запуска вы должны предоставить корневой узел. Есть больше вещей, на которые нужно смотреть, но это начало. Если вы предоставите определение модели, мы сможем помочь дальше. – Izhaki

+0

@ Ижаки Я добавил свою модель в конце своего вопроса, не могли бы вы снова рассмотреть мой вопрос? спасибо за помощь! –

ответ

1

Я сплавления код с кусочком рабочего кода шахты. Попробуйте посмотреть, если это работает:

Модель:

Ext.define("App.model.DocumentList_model", { 
    extend: 'Ext.data.Model', 
    fields: [ 
     {name: 'id'}, 
     {name: 'yourRefNo'}, 
     {name: 'documentName' }, 

     {name: 'documentFileName'}, 
     {name: 'updatedBy'}, 
     {name: 'updatedAt', convert: function(v) { return v;} }, // Notice you can do field conversion here 

     {name: 'leaf', type: 'boolean', defaultValue: false, persist: false}, 
    ], 

    proxy: { 
     type: 'ajax', 
     url: '/Document/GetDocumentList/', 
     actionMethods: { 
      read: 'POST' 
     }, 
     reader: { 
      type: 'json', 
      root: 'children' 
     }, 
    },  
}); 

Магазин:

Ext.define('App.store.DocumentList_store', { 
    extend: "Ext.data.TreeStore", 
    model: 'App.model.DocumentList_model', 

    root: { 
     text: 'Root', 
     id: null, 
     expanded: true 
    }, 

    autoLoad: false, 
}); 

JSON ответ:

{ 
    "success":true, 
    "children":[{ 
     "id":1, 
     "yourRefNo":"A91273", 
     "documentName":"Test Document", 
     "documentFileName":"login_to_your_account-BLUE.jpg", 
     "updatedBy":"root root", 
     "updatedAt":"\/Date(1343012244000)\/", 
     "leaf":false 
    }] 
} 
+0

Спасибо! он работает, но мне пришлось изменить documentName на «текст» в JSON Response. –

Смежные вопросы