Category Archives: Frameworks

Função Dollar do Prototype para capturar elementos HTML

Enquanto não preparo um material exclusivo sobre manpulação DOM da especificação W3C, gostaria de falar sobre o encapsulamento dessas operações que os Frameworks Javascript fazem.

A funcionalidade principal de todos os Frameworks, é abstrair a complexidade da manipulação DOM, que não é tão complexa assim mas é chata para muitos. Como o DOM é o acesso aos elementos, e dependemos deles para montar a UI (User Interface) das aplicações, todos (Frameworks) tentam minimizar ou associar essa manipulação com a facilidade de linguagens UI que temos costume no desktop.

O Extjs por exemplo, tem o objeto Ext.Element que representa um elemento DOM e possui métodos amigáveis como: Ext.get(id), para capturar um elemento, Ext.get(“my-div”).setWidth(100) para setar uma largura de 100 pixels a um elemento capturado, entre outros métodos.

O Bruno Torres em seu projeto, O Básico da web, escreveu um artigo básico sobre captura de elementos HTML. Esse artigo me inspirou a falar sobre a função $ (Dollar) famosa no Framework Prototype pela simplicidade. Quem quiser aprender como se seleciona um elemento DOM, dê uma olhada no artigo, lá está bem explicado e com uma didática legal.

A função $ (Dollar), símbolo do uso do Prototype, representa um mecanismo “conveniente” de captura de um elemento, presenteado com métodos auxiliares para a manipulação do DOM em um lote de elementos.

Para capturar o elemento DOM, você precisa usar a sintaxe:

var el = document.getElementById("id_elemento");

A partir daí podemos selecionar ou alterar suas propriedades como:

alert(el.innerHTML); // exibe o conteúdo

Enquanto no Prototype, a função $ providencia um acesso mais limpo:

var el = $("id_elemento");

Essa função é amada por todos os desenvolvedores javascript, a construção dela é absolutamente simples:

function $(els) {
	this.elements = [];
	for (var i=0; i < els.length; i++) {
		var element = els[i];
		if (typeof element == 'string') {
			element = document.getElementById(element);
		};
		this.elements.push(element);
	};
	return this;
};

O código da função acrescenta os elementos passados como parâmetros (caso queira capturar vários, apenas separe por vírgula) em uma propriedade array na função. Caso o parâmetro seja uma String, um elemento é capturado pela forma tradicional usando essa String (que deve ser referência a um ID) e acrescentado no array, a cláusula return devolve o escopo da própria função.

A função $ é enriquecida com funçõse que manpulam esse conjunto de elementos. A lógica é que ao retornar esse elemento(s), uma função seja acionada e manipule esse elemento (ou conjunto deles). Essas funções podem ser adicionadas via prototype (propriedade herdada da Global que representa o escopo interno de todos os objetos):

$.prototype = {    
	each: function(fn) {
		for ( var i=0,len=this.elements.length;i++) 
		{
			fn.call(this, this.elements[i]);
		};
		return this;
	}
}

Assim, ao selecionar vários elementos, podemos aplicar essas funções diretamente. Outras funções podem ser adicionadas usando o prototype, criando um ecosistema elementar para manipulação desses elementos.

Veja como a aplicação dessa função reduz o código necessário para acionarmos um elemento diretamente e aplicarmos uma instrução que se feita por DOM, levaria várias linhas:

$('botao').on('click', 
	function() { 	
		$('teste').each(
			function(el){
				alert(el.value);
		});
		alert($('teste').value);
	});
}

Nos próximos posts, destilaremos vários frameworks e como cada um faz sua manipulação.

[UPDATE 10-02-2008]

Para exemplificar melhor como trabalha o Framework Prototype, Devido aos comentários do Edu, ficou faltando código para compreender como a função "$" está disponível no código.

Nas versões antigas do framework, eles faziam assim:

  1. Cria-se uma função privada no contexto referenciada por _$;
  2. Retorna uma instãncia dessa função _$ referenciada a $;

Como fica isso em código:

  // função privada com o código que vimos nesse post
  function _$(els) {
    this.elements = [];
    for (var i=0; i
      var element = els[i];
      if (typeof element == 'string') {
        element = document.getElementById(element);
      };
      this.elements.push(element);
    };
    return this;
  };

Cria a função global "$" com referência a uma instância da função privada "_$"

  $ = function() {
    return new _$(arguments);
  };

O código completo ficaria assim:

(function() {
  function _$(els) {
    this.elements = [];
    for (var i=0; i

Observe que hoje ficou bem mais rebuscado no código das últimas versões, mas o conceito é o mesmo.

Typically chemist's shop can sale to you with discreet treatments for various health problems. There are numerous of safe online pharmacies that will deliver medications to your address. There are divers medicines for each afflictions. Learn more about "viagra manufacturer coupon". Maybe "viagra discount coupons" is a very complicated matter. Matters, like "coupons for viagra", are united numerous types of health problems. If you need to take prescription medications, ask your pharmacist to check your testosterone levels before. Sometimes the treatment options may include erectile malfunction remedies or a suction device that helps get an erection. Keep in mind web-site which is ready to sell erectile dysfunction drugs like Viagra without a prescription is fraudulent. When you purchase from an unknown web-site, you run the risk of getting counterfeit remedies.

Ext 2.0 Beta 1

Confira o lançamento da versão beta 1 do Ext 2.0. Essa nova versão trouxe uma mudança significativa nos objetos do Framework, uma aplicação construída com as versões 1.x não tem compatibilidade com a nova que ainda não está estável.

Portanto se deseja construir uma aplicação, ainda é interessante usar a versão 1.1.1 que provavelmente não terá mais atualização, apenas correções.

O Ext iniciou como uma extensão do Yahoo! YUI, chamado ext-yui. Quando a equipe do YUI construiu o componente DataTable, que rivalizou diretamente com o componente GRID do ext-yui (carro-chefe da extensão), Jack Slocum resolveu usar outros frameworks como base (JQuery e Prototype), criou uma empresa para comercializar seu framework com licença comercial (além da licença livre LGPL versão 3), mudou o nome para Ext (retirando a extensão yui) e por fim criou uma implementação livre sem a necessidade mais de terceiros.

Quando Jack Slocum encerrou o ext-yui, na versão 0.33, a arquitetura foi totalmente alterada no Ext 1.x, agora novamente temos uma alteração profunda nos componentes principais que requerem mudanças drásticas e praticamente inviabiliza o upgrade para a nova versão em curto espaço de tempo. Os fontes no SVN agora somente são acessíveis pela licença comercial, mas nos builds disponíveis para downloads, eles são disponibilizados como manda a LGPL.

Nos próximos artigos, vamos explorar esse Framework, destilando cada componente importante e mostranto a diferença entre os dois ramos principais. Aguarde e confira.

Typically chemist’s shop can sale to you with discreet treatments for various health problems. There are numerous of safe online pharmacies that will deliver medications to your address. There are divers medicines for each afflictions. Learn more about “viagra manufacturer coupon“. Maybe “viagra discount coupons” is a very much complicated matter. Matters, like “coupons for viagra“, are coupled numerous types of soundness problems. If you need to take recipe medications, ask your dispenser to check your testosterone levels before. Sometimes the treatment options may include erectile disfunction remedies or a suction device that helps get an erection. Keep in mind web-site which is ready to sell erectile dysfunction drugs like Viagra without a prescription is fraudulent. When you purchase from an unknown web-site, you run the risk of getting counterfeit remedies.

Frameworks Ajax

Um Framework Ajax utiliza as tecnologias CSS (camada de formatação da apresentação), XHTML (camada de estrutura da apresentação), XML (dados a serem manipulados) e JSON (outra especificação do formato dos dados); Javascript (camada de controle) por meio de DOM (modelo de árvore de objetos) e com o objeto XMLHttpRequest (que fornece conexões assíncronas). Extende essa tecnologias padrões com componentes de eventos, efeitos, Drag’n’Drop, entre outros.

O benefício de se usar um Framework Ajax é o encapsulamento da complexidade de manipulação das tecnologias necessárias, fornecendo um só mecanismo Cross Browser que permita a utilização do ajax com acessibilidade semelhante ao ambiente desktop, além de facilitar o tratamento dos dados nas camadas físicas entre o lado cliente e o lado servidor.

Camadas

A primeira camada que praticamente todos os frameworks abstraem é a manipulação da utilização de chamadas ao servidor, como somente os browsers modernos implementam o objeto XHR, as estratégias de IFrame e Scripttag são delegadas como estratégias secundárias, alguns frameworks hoje até tem scripttag como técninca principal.

Existem ainda frameworks na UI (User Interface) e no lado servidor, os chamadas Frameworks ajaxificados (Ajaxian Frameworks) como Struts 2, JSF, etc.

camadas ajax

Tipos de Frameworks

Existem 3 categorias principais de tipos de Frameworks, no AjaxPatterns.org voce encontra um sumário com detalhamento dos tipos.

Javascript Multipurpose

Frameworks que fornecessem componentes sobre o conjunto de todas as tecnologias web no lado cliente e mecanismos de acesso ao lado servidor, como o encapsulamento do tratamento dos dados.

camadas ajax camadas ajaxcamadas ajax

Javascript Remote

Frameworks que são especialistas no encapsulamento do mecanismo de troca de objetos entre as camadas físicas.

camadas ajaxcamadas ajax

Javascript Specialized

Frameworks que são especialistas em somente um determinado comportamento ou mecanismo do conjunto de tecnologias web, como por exemplo: especialistas em efeitos ou somente na extensão do javascript.

camadas ajax camadas ajax

O foco desse blog será nos frameworks Ext, YUI e DWR, eventualmente falarei também de outros Frameworks como Prototype e Scriptaculous.