<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JulioGreff.net &#187; options</title>
	<atom:link href="http://juliogreff.net/tag/options/feed/" rel="self" type="application/rss+xml" />
	<link>http://juliogreff.net</link>
	<description>A mesma web, um novo estilo de desenvolvimento</description>
	<lastBuildDate>Sat, 07 May 2011 17:07:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Mootools &#8211; Options</title>
		<link>http://juliogreff.net/mootools-options/</link>
		<comments>http://juliogreff.net/mootools-options/#comments</comments>
		<pubDate>Sun, 20 Jan 2008 16:47:44 +0000</pubDate>
		<dc:creator>Julio Greff</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[bibliotecas]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[options]]></category>
		<category><![CDATA[poo]]></category>

		<guid isPermaLink="false">http://www.juliogreff.blog.br/mootools-options/</guid>
		<description><![CDATA[Através dos conceitos de reutilização de código, as funções JavaScript de hoje contém opções e mais opções para o usuário definir (ou não). Verificar cada uma dessas opções manualmente dá muito trabalho, mas a Mootools nos ajuda. Vamos ver o suporte dessa incrível biblioteca, através da classe Options. O que faz? A classe Options define [...]

<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/mootools-eventos/' rel='bookmark' title='Permanent Link: Mootools &#8211; Eventos'>Mootools &#8211; Eventos</a></li>
<li><a href='http://juliogreff.net/mootools-classes/' rel='bookmark' title='Permanent Link: Mootools &#8211; Classes'>Mootools &#8211; Classes</a></li>
<li><a href='http://juliogreff.net/mootools-chain/' rel='bookmark' title='Permanent Link: Mootools &#8211; Chain'>Mootools &#8211; Chain</a></li>
<li><a href='http://juliogreff.net/ajax-com-a-mootools/' rel='bookmark' title='Permanent Link: Ajax com a Mootools'>Ajax com a Mootools</a></li>
<li><a href='http://juliogreff.net/mootools-menu-sanfona/' rel='bookmark' title='Permanent Link: Mootools &#8211; Menu Sanfona'>Mootools &#8211; Menu Sanfona</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Através dos conceitos de reutilização de código, as funções JavaScript de hoje contém opções e mais opções para o usuário definir (ou não). Verificar cada uma dessas opções manualmente dá muito trabalho, mas a <a href="http://www.mootools.net/" rel="external" title="Mootools Library">Mootools</a> nos ajuda. Vamos ver o suporte dessa incrível biblioteca, através da classe <code>Options</code>.</p>
<h3>O que faz?</h3>
<p>A classe <code>Options</code> define as opções passadas pelo usuário para alguma classe. Essa definição é feita sobrescrevendo os valores padrão (caso esses sejam definidos pelo usuário) e os mantendo quando nenhuma opção correspondente é passada.</p>
<p>Lógico, nada muito espetacular. Isso poderia ser feito através da função <code>$merge</code>, da própria Mootools. Mas há mais que isso. Além de definir opções, a classe <code>Options</code> também vasculha-as em busca de opções que comecem com &#8220;on&#8221;, e automaticamente adicionam-as como um evento, caso a classe <code>Events</code> esteja implementada. É mais que apenas um <code>$merge</code> disfarçado&#8230;</p>
<h3>Implementando</h3>
<p>Mais uma vez, antes de podermos utilizar essa classe extra, devemos implementá-la em nossa classe. Novamente, utilizamos o método <code>Class.implement</code>.</p>
<p>Caso você queira utilizar o suporte a eventos, também implemente a classe <code><a href="http://juliogreff.net/mootools-eventos" title="Mootools - Eventos">Events</a></code>, na mesma declaração.</p>
<pre><code>myClass.implement(new Options, new Events);
</code></pre>
<h3>Definindo Opções</h3>
<p>Antes de tudo, é necessário definir as opções que serão utilizadas por padrão. Essas opções padrão devem estar em <code>this.options</code>, sendo <code>this</code> a nossa classe.</p>
<pre><code>var SlideShow = new Class({
	"options": {
		"slides": [],
		"startSlide": 0
	},
	"initialize": function() {}
});
</code></pre>
<p>Para fazer a &#8220;escolha&#8221; das opções, basta utilizar o método <code>Options.setOptions</code>, levando como parâmetro as opções que devem sobrescrever as opções padrão. Após a chamada ao método, todas as opções estarão disponíveis em <code>this.options</code>. Se o usuário definir opções que não estão definidas como padrão, elas também serão adicionadas.</p>
<pre><code>var SlideShow = new Class({
	"options": {
		"slides": [],
		"startSlide": 0
	},
	"initialize": function(options) {
		this.setOptions(options);
	}
});
var mySlideShow = new SlideShow({
	"slides": [$("slide-1"), $("slide-2")],
	"wrap": true
});
mySlideShow.options["startSlide"]; // 0
mySlideShow.options["wrap"]; // true, também foi adicionada
</code></pre>
<h3>Definindo Eventos</h3>
<p>Não há diferença quanto a adicionar opções comuns ou eventos, os dois são adicionados da mesma maneira.</p>
<pre><code>var mySlideShow = new SlideShow({
	"slides": [$("slide-1"), $("slide-2")],
	"wrap": true,
	"onStart": function() {}
});
</code></pre>
<p>No caso de eventos, não é necessário definir uma opção padrão, já que os eventos são chamados apenas se estiverem definidos, não causando erros. Caso você considere necessário, pode-se usar <code>Class.empty</code> como padrão. <code>Class.empty</code> é apenas uma função vazia, apenas para não precisarmos nos preocupar em definir algo a ser executado.</p>
<pre><code>var SlideShow = new Class({
	"options": {
		"slides": [],
		"startSlide": 0,
		"onStart": Class.empty
	},
	"initialize": function(options) {
		this.setOptions(options);
		this.fireEvent("onStart", this.options.startSlide, 10);
	}
});
</code></pre>
<p>Assim como as outras classes, a própria biblioteca faz grande uso de <code>Options</code>. É o espírito da reutilização, tanto na própria biblioteca quanto para os desenvolvedores. Até a próxima!</p>


<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/mootools-eventos/' rel='bookmark' title='Permanent Link: Mootools &#8211; Eventos'>Mootools &#8211; Eventos</a></li>
<li><a href='http://juliogreff.net/mootools-classes/' rel='bookmark' title='Permanent Link: Mootools &#8211; Classes'>Mootools &#8211; Classes</a></li>
<li><a href='http://juliogreff.net/mootools-chain/' rel='bookmark' title='Permanent Link: Mootools &#8211; Chain'>Mootools &#8211; Chain</a></li>
<li><a href='http://juliogreff.net/ajax-com-a-mootools/' rel='bookmark' title='Permanent Link: Ajax com a Mootools'>Ajax com a Mootools</a></li>
<li><a href='http://juliogreff.net/mootools-menu-sanfona/' rel='bookmark' title='Permanent Link: Mootools &#8211; Menu Sanfona'>Mootools &#8211; Menu Sanfona</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://juliogreff.net/mootools-options/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

