我有一個對象與此結構如何用遞歸對象extjs填充商店?
第一 最後 UID ID RELS []
RELS是包含同樣具有相同的結構對象的陣列。 我如何管理這個對象的方式來填充一個treeStore在負載中使用extjs?我需要保持母體之間的層次結構,並童車
例如
父
child1
的child2
nephew1
nephew2
等。它們都在父節點下。
有什麼建議嗎?我嘗試了幾種使用遞歸函數但沒有結果的方法。
這是我的代碼(不工作)
Ext.define('utenti', {
extend: 'Ext.data.Model', fields: [ {name:'F', type: 'string'}, {name:'L', type: 'string'}, {name:'Uid', type: 'string'}, {name:'Id', type: 'string'} ] });var TreeUserStore = Ext.create('Ext.data.TreeStore', { model: 'utenti', root: { text: 'Root', //id: 'Radice_utenti', expanded: true }, listeners:{ load: function eachRecursive(ResObj){ var childNode; if(ResObj.Rels.length > 0){ for (i=0; i<data.Rels.length;i++){ eachRecursive(ResObj.Rels[i]); } } else{ childNode = Ext.create('utenti',{ F: ResObj.F, L: ResObj.L, Uid: ResObj.Uid, Id: ResObj.Id }); TreeUserStore.appendChild(child); } }
由於事先
編輯:
我發現,從對象中提取數據的功能
函數eachRecursive(ResObj,pare NT){
if(ResObj.Rels.length > 0) { var childNodeModel = { name: ResObj.F + " " +ResObj.L, text: ResObj.F + " " +ResObj.L, leaf: false, children: [] }; alert("padre:" + parent.name + ", figlio:" + childNodeModel.name); parent.children.push(childNodeModel); for(var i=0; i<ResObj.Rels.length; i++){ eachRecursive(ResObj.Rels[i], childNodeModel); } } else { var childNodeModel = { name: ResObj.F + " " +ResObj.L, text: ResObj.F + " " + ResObj.L, leaf: true }; alert("padre:" + parent.name + ", figlio:" + childNodeModel.name); parent.children.push(childNodeModel); } }
但此刻我不是能夠在TreePanel中顯示的元素。我試圖使用appendChild但沒有任何結果,我也嘗試創建TreeNode,但它給我和錯誤,如'對象不是一個函數'。
我該怎麼辦?
謝謝akatum,它完美的作品! 我只做了一些小的變化: 在函數中,我將變量childNode聲明爲「var childNode」,因爲否則所有在父項之後的子項都將放在它下面,失去它的真正父項(我不知道它是否清除..)。另一個改變是電話,我用 eachRecursive(data,TreeUser.getRootNode()); – Erik
不客氣。是的,我錯誤地將變量聲明爲全局變量,我已經解決了這個問題。 – Akatum