Creating jQuery plugins for MS AJAX components, dynamically!

Tuesday, May 5, 2009 2 minute read Tags: javascript ms-ajax jquery
Hey, thanks for the interest in this post, but just letting you know that it is over 3 years old, so the content in here may not be accurate.

Bertrand Le Roy had an interesting post entitled Creating jQuery plug-ins from MicrosoftAjax components. It’s not a bad concept, but I miss read it when I first had a read, I thought it was creating all of certain types into a jQuery plug-ins.

But as I said I miss read it, no drama, I decided to create that on my own. So I created a simple function for Microsoft AJAX which will turn all the loaded Sys.UI.Control types into jQuery plug-ins:

Sys.Application.add_load(function() {
	var types = new Array();
	for (i in Sys.__upperCaseTypes) {
		var t = Sys.__upperCaseTypes[i];
		var ret = (function(type) {
			if (type && type.__class) {
				if (type.__baseType) {
					if (type.__baseType.__typeName === "Sys.UI.Control") {
						return true;
					} else {
						return arguments.callee(type.__baseType);
					}
				} 
			}
		})(t);
		if (ret) types.push(t);
	}

	for (var i = 0; i < types.length; i++) {
		var t = types[i];
		var nameParts = t.__typeName.split(".");
		var name = t.__typeName;
		if (nameParts.length > 1) {
			name = nameParts[nameParts.length - 1];
		}
		jQuery.fn[name] = function(properties) {
			return this.each(function() {
				Sys.Component.create(t.__typeName, properties, {}, {}, this);
			});
		}
	}
});

It looks at the collection of registered types which are done when you do MyType.registerClass(“MyType”); so it’s nice easily does them all. It’ll automatically create a plug-in for any type inheriting from Sys.UI.Control, but it can easily be done to any base type which want. So you could use Sys.Component (although I don’t recommend it).

Yeah it’s not really that practical, especially if you have a lot of controls, but it’s just a POC. If I get some time I’ll modify it to check interfaces instead :P