Code
Code
Code

Pubsub un altre plantejament.

Ahir al bloc de Rebecca Murphey  va publicar un screencast  fen una demo de com funciona el plugin pubsub  de Peter Higgins.

El plugin esta inspirat en The Dojo Toolkit que té una api amb el publish i el subscribe.

El codi del plugin és increïblement senzill, té més línies de comentaris que de codi, però la idea que implementa és molt interessant (INMHO).

El plugin té tres mètodes : publish, subscribe i unsubscribe.

El mètode subscribe es “subscriure” un funció callback a un determinat identificador/canal.

El mètode unsubscribe fa el contrari.

El mètode publish és la clau de volta de la llibreria, quan l’invoques crida a tots els callback que hagis vinculat a aquell canal successivament, passant els paràmetres que especifiquis.

Al post de la Rebecca podeu veure un codi d’exemple on es visualitza clarament les possibilitats del plugin.

La pregunta és es podria fer el mateix només amb jQuery?

La resposta és si, utilitzant events personalitzats, encara que veig més elegant la opció del pubsub. Aquí he fet una demo

El codi

 


/* jQuery  way */
(function($) {

	$(document).bind('search.term', function(e,term) {
	  $.getJSON(
		'http://query.yahooapis.com/v1/public/yql?format=json&callback=',
		{ q : getQuery(term) },
		function(resp) {
		  if (!resp.query.results.result.length) { return; }
		  $(document).trigger('search.results', [ resp.query.results.result ]);
		}
	  );
	});
	
	// look ma, a new feature!
	$(document).bind('search.term', function(e,term) {
	$('#searches').append('<li>' + term + '</li>');
	});
	
	$(document).bind('search.results', function(e,results) {  

var tmpl = '<li><p><a href="{{url}}">{{title}}</a></p></li>',

html = $.map(results, function(result) {

 

return tmpl .replace('{{url}}', result.url) .replace('{{title}}', result.title) }).join(''); $('#results').html(html); }); function getQuery(term) { return 'select title,url from search.news where query="' + term + '"'; } $(document).ready(function() { $('#searchForm').submit(function(e) { e.preventDefault(); var term = $.trim($(this).find('input[name="q"]').val()); if (!term) { return; } $(document).trigger('search.term', [ term ]); }); }); })(jQuery);
comments powered by Disqus
Comunicatek - - La Bisbal d’Empordà - dani@comunicatek.com - Sobre code - Nota legal