I need homogenous data items for multilevels in your tree control.
Most data structures coming from our services are not homogenous.
We use the following to create a homogenous structure for the tree.
Maybe you could incorporate something like this - note that we use angular, and I use their $parse service in my implementation:
// CALLER:
var levelDescriptors = [
{ item: "functionGroup", items: "functions" },
{ item: "this", items: null }];
itemHierarchy = Portal.buildItemHierarchy(
functionGroups,
levelDescriptors,
$parse);
// UTIL CODE:
buildItemHierarchy: function(hierarchicalItems, levelDescriptors, $parse) {
var hierarchicalDataItems = [];
if(Portal.isDefined(hierarchicalItems)) {
hierarchicalDataItems = Portal.createHierarchicalDataItems(0, hierarchicalItems, levelDescriptors, $parse);
}
return hierarchicalDataItems;
},
createHierarchicalDataItems: function(level, levelItems, levelDescriptors, $parse) {
var levelDataItems = [];
if(Portal.isDefined(levelItems)) {
if(Portal.isDefined(levelDescriptors)) {
if(level < levelDescriptors.length) {
for(var i=0; i<levelItems.length; i++) {
// extract datasource for current level.
// create an associated node data item.
var levelItem = levelItems[i];
var levelDescriptor = levelDescriptors[level];
var item = levelItem;
if(levelDescriptor.item !== "this") {
item = $parse(levelDescriptor.item)(levelItem);
}
if(Portal.isDefined(item)) {
var levelDataItem = Portal.createNodeDataItem(item);
levelDataItems.push(levelDataItem);
// extract children for current level.
// create associated (child) node data items.
var items = $parse(levelDescriptor.items)(levelItem);
if(Portal.isDefined(items)) {
var itemsLevel = level + 1;
levelDataItem.items = Portal.createHierarchicalDataItems(
itemsLevel,
items,
levelDescriptors,
$parse);
}
}
}
}
}
}
return levelDataItems;
},
createNodeDataItem: function(item) {
return {
id: item.id,
text: item.name,
dataSource: item,
expanded: false,
items: []
};
},