How to know proprieties and values of an object in QML

Hi all,
few days ago, working on an app for Ubuntu for Phones I needed to know all proprieties and values of an object during the execution of the app.
It’s a very easy thing to do, but a bit boring to write the code to debug every time, so I wrote a little function to do this, with formattation of the output.

Hope it will be useful to someone :-)

So, to call the function we only need to write debug (objectId, 0) whenever we need to debug an object.
0 is because it’s a recursive function, and it indicates the level of formattation

function debug(id, level) {
	function debug(id, level) {
	var level_string = '';
 
	// If isn't a first level function, add some formattation
	for (var i = 0; i < level; i++) {
		if (i+1 === level) {
			level_string += '|--------';
		}
		else {
			level_string += '         ';
		}
	}
 
	if (level === 0) { 
		level_string = 'property ';
	}
	else {
		level_string += '> ';
	}
 
	// For every value in the object
	for (var value in id) {
 
		// We need to don't take care of these elements because the output is too long. I mean, do you want to print all children of the parent? :-)
		// If you are interesting in the output of anchors, set a maximum to leveles of recursion
		if (value != 'parent' && value != 'anchors' && value != 'data' && value != 'resources' && value != 'children') {
			// Functions haven't children and aren't property
			if (typeof(id[value]) === 'function') {
				if (level === 0) {
					console.log('function ' + value + '()');
				}
				else {
					console.log(level_string + 'function ' + value + '()');
				}
			}
			// Objects have children
			else if (typeof(id[value]) === 'object') {
				console.log(level_string + value + ' [object]');
				debug(id[value], level+1);
			}
			// Of all others things we print value and type :-)
			else {
				console.log(level_string + value + ': ' + id[value] + ' [' + typeof(id[value]) + ']');
			}
		}
	}
}

Ciao,
R.

This work is licensed under Creative Commons Attribution 3.0 Unported

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>