Hi folks,
I'm using a treeview from a HierarchicalDataSource and wanted to be able to get the element from the treeview if it matched all the properties that I specified. My initial data looked something like this:
I wanted to be able to get the list item element (<li>) for any particular item so I built a function to do it and thought I'd share. You can use my function like this (in this example I want to get the element for the item with the id '3202':
You can also search on multiple properties:
To enable this functionality, after creating a treeview with a HierarchicalDataSource, add this code (assumes your treeview element is #treeView - change as required):
Hope this helps someone out!
Rob - Irrelon Software Limited
I'm using a treeview from a HierarchicalDataSource and wanted to be able to get the element from the treeview if it matched all the properties that I specified. My initial data looked something like this:
[{ id:'2022', text:'Folder1', items: [{ id:'3202', text:'Sub-Folder1' }, { id:'1234', text:'Sub-Folder2', moo: true }]}]I wanted to be able to get the list item element (<li>) for any particular item so I built a function to do it and thought I'd share. You can use my function like this (in this example I want to get the element for the item with the id '3202':
var liElement = $('#treeView').data('kendoTreeView').search({id:'3202'});You can also search on multiple properties:
var liElement = $('#treeView').data('kendoTreeView').search({id:'1234', moo: true});To enable this functionality, after creating a treeview with a HierarchicalDataSource, add this code (assumes your treeview element is #treeView - change as required):
$("#scenegraph-treeview").data('kendoTreeView').search = function (json, source) { if (json !== undefined) { var data = source || this.dataSource, child, item, i, k, match, allMatched; // If the data has the properties we need if (data && data._data) { child = data._data; // If the array has items if (child.length) { // Loop the array items for (i = 0; i < child.length; i++) { item = child[i]; console.log('Checking child ' + i + ' id ' + item.id); // Check each json property against the current item's properties // and if they all match, grab the tree item based on it's UID allMatched = true; for (k in json) { if (json.hasOwnProperty(k)) { if (item[k] !== json[k]) { // The item doesn't have all the properties // that the json object does allMatched = false; break; } } } if (allMatched) { // We've found a match, grab the tree item from the UID and return it return this.findByUid(item.uid); } else { // We didn't find what we were looking for so search the children if (item.children) { match = this.search(json, item.children); if (match) { return match; } } } } } } }};Hope this helps someone out!
Rob - Irrelon Software Limited