<?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>Criteria Studio &#187; template</title>
	<atom:link href="https://www.criteriastudio.com/tag/template/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.criteriastudio.com</link>
	<description>Mobile apps developers</description>
	<lastBuildDate>Wed, 23 May 2018 10:18:22 +0000</lastBuildDate>
	<language>es-ES</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.9.40</generator>
	<item>
		<title>App Template para Titanium</title>
		<link>https://www.criteriastudio.com/app-template-para-titanium/</link>
		<comments>https://www.criteriastudio.com/app-template-para-titanium/#comments</comments>
		<pubDate>Sun, 12 Aug 2012 11:40:18 +0000</pubDate>
		<dc:creator><![CDATA[J. Rayon]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[commonJS]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[mobile web]]></category>
		<category><![CDATA[tabGroup]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[titanium]]></category>

		<guid isPermaLink="false">http://www.criteriastudio.com/?p=531</guid>
		<description><![CDATA[Hoy voy a crear un sencillo template de Titanium que podremos usar para empezar nuestras aplicaciones de cero. Nos servirá para sustituir el template que usa Titanium Studio al crear una aplicación en blanco. La aplicación por defecto de Titanium Studio crea un tabGroup con dos ventanas. Yo voy a crear la misma aplicación, pero [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Hoy voy a crear un sencillo template de Titanium que podremos usar para empezar nuestras aplicaciones de cero. Nos servirá para sustituir el template que usa Titanium Studio al crear una aplicación en blanco.</p>
<p>La aplicación por defecto de Titanium Studio crea un tabGroup con dos ventanas. Yo voy a crear la misma aplicación, pero usando módulos commonJS. Además, ya dejamos preparada la estructura de directorios para que nuestra app pueda crecer correctamente desde un principio.</p>
<blockquote><p>Antes de continuar, puede que te interesen estos artículos si no los has leído aún.<a href="http://www.criteriastudio.com/javascript-para-titanium-i/">JavaScript para Titanium (I)</a>, <a href="http://www.criteriastudio.com/javascript-para-titanium-ii/">JavaScript para Titanium (II)</a>, <a href="http://www.criteriastudio.com/commonjs-para-titanium/">CommonJS para Titanium</a></p></blockquote>
<h4>Resumen</h4>
<p>Crearemos una app con un TabGroup con 3 tabs (secciones). Cada tab abre una ventana diferente. El mismo código nos permitirá distribuir una aplicación nativa android, iPhone y mobile web.</p>
<h4>app.js</h4>
<p>Empezamos por el punto de arranque de la app. Recuerda que todas las apps titanium arrancan desde app.js.</p>
<div id="gist3331472" class="gist">
<div class="gist-file" translate="no" data-color-mode="light" data-light-theme="light">
<div class="gist-data">
<div class="js-gist-file-update-container js-task-list-container">
<div id="file-app-js" class="file my-2">
<div itemprop="text"
      class="Box-body p-0 blob-wrapper data type-javascript  "
      style="overflow: auto" tabindex="0" role="region"
      aria-label="app.js content, created by jaraen on 11:24AM on August 12, 2012."
    ></p>
<div class="js-check-hidden-unicode js-blob-code-container blob-code-content">
<p>  <template class="js-file-alert-template"></p>
<div data-view-component="true" class="flash flash-warn flash-full d-flex flex-items-center">
  <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"></p>
<path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg><br />
    <span><br />
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.<br />
      <a class="Link--inTextBlock" href="https://github.co/hiddenchars" target="_blank">Learn more about bidirectional Unicode characters</a><br />
    </span></p>
<div data-view-component="true" class="flash-action">        <a href="{{ revealButtonHref }}" data-view-component="true" class="btn-sm btn">    Show hidden characters<br />
</a>
</div>
</div>
<p></template><br />
<template class="js-line-alert-template"><br />
  <span aria-label="This line has hidden Unicode characters" data-view-component="true" class="line-alert tooltipped tooltipped-e"><br />
    <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"></p>
<path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg><br />
</span></template></p>
<table data-hpc class="highlight tab-size js-file-line-container" data-tab-size="4" data-paste-markdown-skip data-tagsearch-path="app.js">
<tr>
<td id="file-app-js-L1" class="blob-num js-line-number js-blob-rnum" data-line-number="1"></td>
<td id="file-app-js-LC1" class="blob-code blob-code-inner js-file-line">(function(){</td>
</tr>
<tr>
<td id="file-app-js-L2" class="blob-num js-line-number js-blob-rnum" data-line-number="2"></td>
<td id="file-app-js-LC2" class="blob-code blob-code-inner js-file-line">
</td>
</tr>
<tr>
<td id="file-app-js-L3" class="blob-num js-line-number js-blob-rnum" data-line-number="3"></td>
<td id="file-app-js-LC3" class="blob-code blob-code-inner js-file-line">	var Mods = require(&#39;/ModulePaths&#39;);</td>
</tr>
<tr>
<td id="file-app-js-L4" class="blob-num js-line-number js-blob-rnum" data-line-number="4"></td>
<td id="file-app-js-LC4" class="blob-code blob-code-inner js-file-line">
</td>
</tr>
<tr>
<td id="file-app-js-L5" class="blob-num js-line-number js-blob-rnum" data-line-number="5"></td>
<td id="file-app-js-LC5" class="blob-code blob-code-inner js-file-line">	var TabGroup = require(Mods.TABGROUP);</td>
</tr>
<tr>
<td id="file-app-js-L6" class="blob-num js-line-number js-blob-rnum" data-line-number="6"></td>
<td id="file-app-js-LC6" class="blob-code blob-code-inner js-file-line">
</td>
</tr>
<tr>
<td id="file-app-js-L7" class="blob-num js-line-number js-blob-rnum" data-line-number="7"></td>
<td id="file-app-js-LC7" class="blob-code blob-code-inner js-file-line">	var tabGroup = new TabGroup();</td>
</tr>
<tr>
<td id="file-app-js-L8" class="blob-num js-line-number js-blob-rnum" data-line-number="8"></td>
<td id="file-app-js-LC8" class="blob-code blob-code-inner js-file-line">
</td>
</tr>
<tr>
<td id="file-app-js-L9" class="blob-num js-line-number js-blob-rnum" data-line-number="9"></td>
<td id="file-app-js-LC9" class="blob-code blob-code-inner js-file-line">	tabGroup.open();</td>
</tr>
<tr>
<td id="file-app-js-L10" class="blob-num js-line-number js-blob-rnum" data-line-number="10"></td>
<td id="file-app-js-LC10" class="blob-code blob-code-inner js-file-line">
</td>
</tr>
<tr>
<td id="file-app-js-L11" class="blob-num js-line-number js-blob-rnum" data-line-number="11"></td>
<td id="file-app-js-LC11" class="blob-code blob-code-inner js-file-line">})();</td>
</tr>
</table>
</div></div>
</p></div>
</div></div>
<div class="gist-meta">
        <a href="https://gist.github.com/jaraen/3331472/raw/f4dfee80acfc139e396e44e60397f8c67818b914/app.js" style="float:right" class="Link--inTextBlock">view raw</a><br />
        <a href="https://gist.github.com/jaraen/3331472#file-app-js" class="Link--inTextBlock"><br />
          app.js<br />
        </a><br />
        hosted with &#10084; by <a class="Link--inTextBlock" href="https://github.com">GitHub</a>
      </div>
</p></div>
</div>
<p>Hay varias cosas que comentar. Primero, habrás observado que todo el fichero está envuelto en una función anónima que se autoejecuta (el hecho de que la función esté envuelta en unos paréntesis con otros paréntesis a continuación hace que la función se ejecute tras ser declarada). Como recordarás de la <a href="http://www.criteriastudio.com/javascript-para-titanium-ii/" target="_blank">introducción a JavaScript</a>, las funciones limitan el ámbito de las variables. Con esta función anónima, lo que hacemos es evitar que las variables Mods, TabGroup y tabGroup salten al ámbito global y por tanto puedan ser accesibles desde otras partes de la aplicación. Esta técnica sólo es necesaria (en principio) en el fichero app.js, ya que el resto de nuestros ficheros van a ser todos módulos commonJS, que  limitan de por sí el ámbito de sus variables.</p>
<p>Lo primero que hace app.js es cargar un módulo llamado ModulePaths. Aunque esto no es obligatorio y no lo verás en todas las apps, es una costumbre que he puesto en práctica y que me ha demostrado tener varias ventajas. De momento, basta saber que ModulePaths contiene todas las sendas y nombres de ficheros del proyecto para no tener que recordarlos.</p>
<p>A continuación, cargo el módulo TabGroup (explicado más adelante). La línea 9 crea una instancia del módulo y finalmente se da la orden de abrir el tabGroup. Mucho ojo a las mayúsculas y minúsculas. Es una buena costumbre cargar los módulos en variables con mayúsculas (TabGroup) y las instancias de módulos con minúsculas (tabGroup).</p>
<h4>app/ui/TabGroup.js</h4>
<p>Este módulo devuelve una instancia de Titanium.UI.TabGroup, ya adaptada a nuestras necesidades. El hecho de poder cargar un componente de Titanium, modificarlo y ampliarlo a nuestro gusto y devolverlo como un componente nuevo, es tremendamente útil y lo desarrollaré a fondo en próximas entregas.</p>
<p>En todos mis módulos siempre lo primero que hago es cargar ModulePaths, a continuación defino los módulos que voy a usar en este módulo y finalmente se implementa el módulo desde module.exports.</p>
<div id="gist3331472" class="gist">
<div class="gist-file" translate="no" data-color-mode="light" data-light-theme="light">
<div class="gist-data">
<div class="js-gist-file-update-container js-task-list-container">
<div id="file-tabgroup-js" class="file my-2">
<div itemprop="text"
      class="Box-body p-0 blob-wrapper data type-javascript  "
      style="overflow: auto" tabindex="0" role="region"
      aria-label="TabGroup.js content, created by jaraen on 11:24AM on August 12, 2012."
    ></p>
<div class="js-check-hidden-unicode js-blob-code-container blob-code-content">
<p>  <template class="js-file-alert-template"></p>
<div data-view-component="true" class="flash flash-warn flash-full d-flex flex-items-center">
  <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"></p>
<path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg><br />
    <span><br />
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.<br />
      <a class="Link--inTextBlock" href="https://github.co/hiddenchars" target="_blank">Learn more about bidirectional Unicode characters</a><br />
    </span></p>
<div data-view-component="true" class="flash-action">        <a href="{{ revealButtonHref }}" data-view-component="true" class="btn-sm btn">    Show hidden characters<br />
</a>
</div>
</div>
<p></template><br />
<template class="js-line-alert-template"><br />
  <span aria-label="This line has hidden Unicode characters" data-view-component="true" class="line-alert tooltipped tooltipped-e"><br />
    <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"></p>
<path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg><br />
</span></template></p>
<table data-hpc class="highlight tab-size js-file-line-container" data-tab-size="4" data-paste-markdown-skip data-tagsearch-path="TabGroup.js">
<tr>
<td id="file-tabgroup-js-L1" class="blob-num js-line-number js-blob-rnum" data-line-number="1"></td>
<td id="file-tabgroup-js-LC1" class="blob-code blob-code-inner js-file-line">var Mods = require(&#39;/ModulePaths&#39;);		//load module paths</td>
</tr>
<tr>
<td id="file-tabgroup-js-L2" class="blob-num js-line-number js-blob-rnum" data-line-number="2"></td>
<td id="file-tabgroup-js-LC2" class="blob-code blob-code-inner js-file-line">
</td>
</tr>
<tr>
<td id="file-tabgroup-js-L3" class="blob-num js-line-number js-blob-rnum" data-line-number="3"></td>
<td id="file-tabgroup-js-LC3" class="blob-code blob-code-inner js-file-line">var Window1 = require(Mods.WINDOW1),</td>
</tr>
<tr>
<td id="file-tabgroup-js-L4" class="blob-num js-line-number js-blob-rnum" data-line-number="4"></td>
<td id="file-tabgroup-js-LC4" class="blob-code blob-code-inner js-file-line">	Window2 = require(Mods.WINDOW2),</td>
</tr>
<tr>
<td id="file-tabgroup-js-L5" class="blob-num js-line-number js-blob-rnum" data-line-number="5"></td>
<td id="file-tabgroup-js-LC5" class="blob-code blob-code-inner js-file-line">	Window3 = require(Mods.WINDOW3);</td>
</tr>
<tr>
<td id="file-tabgroup-js-L6" class="blob-num js-line-number js-blob-rnum" data-line-number="6"></td>
<td id="file-tabgroup-js-LC6" class="blob-code blob-code-inner js-file-line">
</td>
</tr>
<tr>
<td id="file-tabgroup-js-L7" class="blob-num js-line-number js-blob-rnum" data-line-number="7"></td>
<td id="file-tabgroup-js-LC7" class="blob-code blob-code-inner js-file-line">module.exports = function(_args) {</td>
</tr>
<tr>
<td id="file-tabgroup-js-L8" class="blob-num js-line-number js-blob-rnum" data-line-number="8"></td>
<td id="file-tabgroup-js-LC8" class="blob-code blob-code-inner js-file-line">	</td>
</tr>
<tr>
<td id="file-tabgroup-js-L9" class="blob-num js-line-number js-blob-rnum" data-line-number="9"></td>
<td id="file-tabgroup-js-LC9" class="blob-code blob-code-inner js-file-line">
</td>
</tr>
<tr>
<td id="file-tabgroup-js-L10" class="blob-num js-line-number js-blob-rnum" data-line-number="10"></td>
<td id="file-tabgroup-js-LC10" class="blob-code blob-code-inner js-file-line">	var tabGroup = Ti.UI.createTabGroup();</td>
</tr>
<tr>
<td id="file-tabgroup-js-L11" class="blob-num js-line-number js-blob-rnum" data-line-number="11"></td>
<td id="file-tabgroup-js-LC11" class="blob-code blob-code-inner js-file-line">	</td>
</tr>
<tr>
<td id="file-tabgroup-js-L12" class="blob-num js-line-number js-blob-rnum" data-line-number="12"></td>
<td id="file-tabgroup-js-LC12" class="blob-code blob-code-inner js-file-line">	var win1 = new Window1();</td>
</tr>
<tr>
<td id="file-tabgroup-js-L13" class="blob-num js-line-number js-blob-rnum" data-line-number="13"></td>
<td id="file-tabgroup-js-LC13" class="blob-code blob-code-inner js-file-line">	</td>
</tr>
<tr>
<td id="file-tabgroup-js-L14" class="blob-num js-line-number js-blob-rnum" data-line-number="14"></td>
<td id="file-tabgroup-js-LC14" class="blob-code blob-code-inner js-file-line">	var win2 = new Window2();</td>
</tr>
<tr>
<td id="file-tabgroup-js-L15" class="blob-num js-line-number js-blob-rnum" data-line-number="15"></td>
<td id="file-tabgroup-js-LC15" class="blob-code blob-code-inner js-file-line">	</td>
</tr>
<tr>
<td id="file-tabgroup-js-L16" class="blob-num js-line-number js-blob-rnum" data-line-number="16"></td>
<td id="file-tabgroup-js-LC16" class="blob-code blob-code-inner js-file-line">	var win3 = new Window3();</td>
</tr>
<tr>
<td id="file-tabgroup-js-L17" class="blob-num js-line-number js-blob-rnum" data-line-number="17"></td>
<td id="file-tabgroup-js-LC17" class="blob-code blob-code-inner js-file-line">
</td>
</tr>
<tr>
<td id="file-tabgroup-js-L18" class="blob-num js-line-number js-blob-rnum" data-line-number="18"></td>
<td id="file-tabgroup-js-LC18" class="blob-code blob-code-inner js-file-line">
</td>
</tr>
<tr>
<td id="file-tabgroup-js-L19" class="blob-num js-line-number js-blob-rnum" data-line-number="19"></td>
<td id="file-tabgroup-js-LC19" class="blob-code blob-code-inner js-file-line">	var tab1 = Ti.UI.createTab({</td>
</tr>
<tr>
<td id="file-tabgroup-js-L20" class="blob-num js-line-number js-blob-rnum" data-line-number="20"></td>
<td id="file-tabgroup-js-LC20" class="blob-code blob-code-inner js-file-line">		window: win1,</td>
</tr>
<tr>
<td id="file-tabgroup-js-L21" class="blob-num js-line-number js-blob-rnum" data-line-number="21"></td>
<td id="file-tabgroup-js-LC21" class="blob-code blob-code-inner js-file-line">		title:&#39;Window 1&#39;,</td>
</tr>
<tr>
<td id="file-tabgroup-js-L22" class="blob-num js-line-number js-blob-rnum" data-line-number="22"></td>
<td id="file-tabgroup-js-LC22" class="blob-code blob-code-inner js-file-line">		icon:&#39;KS_nav_ui.png&#39;</td>
</tr>
<tr>
<td id="file-tabgroup-js-L23" class="blob-num js-line-number js-blob-rnum" data-line-number="23"></td>
<td id="file-tabgroup-js-LC23" class="blob-code blob-code-inner js-file-line">	});</td>
</tr>
<tr>
<td id="file-tabgroup-js-L24" class="blob-num js-line-number js-blob-rnum" data-line-number="24"></td>
<td id="file-tabgroup-js-LC24" class="blob-code blob-code-inner js-file-line">	</td>
</tr>
<tr>
<td id="file-tabgroup-js-L25" class="blob-num js-line-number js-blob-rnum" data-line-number="25"></td>
<td id="file-tabgroup-js-LC25" class="blob-code blob-code-inner js-file-line">	var tab2 = Ti.UI.createTab({</td>
</tr>
<tr>
<td id="file-tabgroup-js-L26" class="blob-num js-line-number js-blob-rnum" data-line-number="26"></td>
<td id="file-tabgroup-js-LC26" class="blob-code blob-code-inner js-file-line">		window:  win2,</td>
</tr>
<tr>
<td id="file-tabgroup-js-L27" class="blob-num js-line-number js-blob-rnum" data-line-number="27"></td>
<td id="file-tabgroup-js-LC27" class="blob-code blob-code-inner js-file-line">		title:&#39;Window 2&#39;,</td>
</tr>
<tr>
<td id="file-tabgroup-js-L28" class="blob-num js-line-number js-blob-rnum" data-line-number="28"></td>
<td id="file-tabgroup-js-LC28" class="blob-code blob-code-inner js-file-line">		icon:&#39;KS_nav_views.png&#39;</td>
</tr>
<tr>
<td id="file-tabgroup-js-L29" class="blob-num js-line-number js-blob-rnum" data-line-number="29"></td>
<td id="file-tabgroup-js-LC29" class="blob-code blob-code-inner js-file-line">	});</td>
</tr>
<tr>
<td id="file-tabgroup-js-L30" class="blob-num js-line-number js-blob-rnum" data-line-number="30"></td>
<td id="file-tabgroup-js-LC30" class="blob-code blob-code-inner js-file-line">	</td>
</tr>
<tr>
<td id="file-tabgroup-js-L31" class="blob-num js-line-number js-blob-rnum" data-line-number="31"></td>
<td id="file-tabgroup-js-LC31" class="blob-code blob-code-inner js-file-line">	var tab3 = Ti.UI.createTab({</td>
</tr>
<tr>
<td id="file-tabgroup-js-L32" class="blob-num js-line-number js-blob-rnum" data-line-number="32"></td>
<td id="file-tabgroup-js-LC32" class="blob-code blob-code-inner js-file-line">		window:  win3,</td>
</tr>
<tr>
<td id="file-tabgroup-js-L33" class="blob-num js-line-number js-blob-rnum" data-line-number="33"></td>
<td id="file-tabgroup-js-LC33" class="blob-code blob-code-inner js-file-line">		title:&#39;Window 3&#39;,</td>
</tr>
<tr>
<td id="file-tabgroup-js-L34" class="blob-num js-line-number js-blob-rnum" data-line-number="34"></td>
<td id="file-tabgroup-js-LC34" class="blob-code blob-code-inner js-file-line">		icon:&#39;KS_nav_ui.png&#39;,</td>
</tr>
<tr>
<td id="file-tabgroup-js-L35" class="blob-num js-line-number js-blob-rnum" data-line-number="35"></td>
<td id="file-tabgroup-js-LC35" class="blob-code blob-code-inner js-file-line">	});</td>
</tr>
<tr>
<td id="file-tabgroup-js-L36" class="blob-num js-line-number js-blob-rnum" data-line-number="36"></td>
<td id="file-tabgroup-js-LC36" class="blob-code blob-code-inner js-file-line">	</td>
</tr>
<tr>
<td id="file-tabgroup-js-L37" class="blob-num js-line-number js-blob-rnum" data-line-number="37"></td>
<td id="file-tabgroup-js-LC37" class="blob-code blob-code-inner js-file-line">
</td>
</tr>
<tr>
<td id="file-tabgroup-js-L38" class="blob-num js-line-number js-blob-rnum" data-line-number="38"></td>
<td id="file-tabgroup-js-LC38" class="blob-code blob-code-inner js-file-line">	tabGroup.addTab(tab1);</td>
</tr>
<tr>
<td id="file-tabgroup-js-L39" class="blob-num js-line-number js-blob-rnum" data-line-number="39"></td>
<td id="file-tabgroup-js-LC39" class="blob-code blob-code-inner js-file-line">	tabGroup.addTab(tab2);</td>
</tr>
<tr>
<td id="file-tabgroup-js-L40" class="blob-num js-line-number js-blob-rnum" data-line-number="40"></td>
<td id="file-tabgroup-js-LC40" class="blob-code blob-code-inner js-file-line">	tabGroup.addTab(tab3);</td>
</tr>
<tr>
<td id="file-tabgroup-js-L41" class="blob-num js-line-number js-blob-rnum" data-line-number="41"></td>
<td id="file-tabgroup-js-LC41" class="blob-code blob-code-inner js-file-line">		</td>
</tr>
<tr>
<td id="file-tabgroup-js-L42" class="blob-num js-line-number js-blob-rnum" data-line-number="42"></td>
<td id="file-tabgroup-js-LC42" class="blob-code blob-code-inner js-file-line">	</td>
</tr>
<tr>
<td id="file-tabgroup-js-L43" class="blob-num js-line-number js-blob-rnum" data-line-number="43"></td>
<td id="file-tabgroup-js-LC43" class="blob-code blob-code-inner js-file-line">	return tabGroup;</td>
</tr>
<tr>
<td id="file-tabgroup-js-L44" class="blob-num js-line-number js-blob-rnum" data-line-number="44"></td>
<td id="file-tabgroup-js-LC44" class="blob-code blob-code-inner js-file-line">};</td>
</tr>
</table>
</div></div>
</p></div>
</div></div>
<div class="gist-meta">
        <a href="https://gist.github.com/jaraen/3331472/raw/f4dfee80acfc139e396e44e60397f8c67818b914/TabGroup.js" style="float:right" class="Link--inTextBlock">view raw</a><br />
        <a href="https://gist.github.com/jaraen/3331472#file-tabgroup-js" class="Link--inTextBlock"><br />
          TabGroup.js<br />
        </a><br />
        hosted with &#10084; by <a class="Link--inTextBlock" href="https://github.com">GitHub</a>
      </div>
</p></div>
</div>
<p>En este caso, declaro las tres ventanas que voy a necesitar en el proyecto (líneas 3-5) y defino el módulo en sí mismo con module.exports. Cada ventana Window1, Window2 y Window3 tiene un fichero .js donde se implementa su código. Más abajo muestro su contenido.</p>
<p>Línea 10, creo el tabGroup de titanium. Líneas 12-16 creo <strong>una instancia</strong> de cada una de las ventanas, líneas 19-40, creo los tabs del tabGroup, asigno las ventanas, títulos e iconos y finalmente devuelvo el tabGroup con todo listo para ser abierto.</p>
<p>&nbsp;</p>
<h4>app/ui/Window1.js</h4>
<p>Las tres ventanas son prácticamente iguales, así que sólo explico la primera.</p>
<div id="gist3331472" class="gist">
<div class="gist-file" translate="no" data-color-mode="light" data-light-theme="light">
<div class="gist-data">
<div class="js-gist-file-update-container js-task-list-container">
<div id="file-window1-js" class="file my-2">
<div itemprop="text"
      class="Box-body p-0 blob-wrapper data type-javascript  "
      style="overflow: auto" tabindex="0" role="region"
      aria-label="Window1.js content, created by jaraen on 11:24AM on August 12, 2012."
    ></p>
<div class="js-check-hidden-unicode js-blob-code-container blob-code-content">
<p>  <template class="js-file-alert-template"></p>
<div data-view-component="true" class="flash flash-warn flash-full d-flex flex-items-center">
  <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"></p>
<path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg><br />
    <span><br />
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.<br />
      <a class="Link--inTextBlock" href="https://github.co/hiddenchars" target="_blank">Learn more about bidirectional Unicode characters</a><br />
    </span></p>
<div data-view-component="true" class="flash-action">        <a href="{{ revealButtonHref }}" data-view-component="true" class="btn-sm btn">    Show hidden characters<br />
</a>
</div>
</div>
<p></template><br />
<template class="js-line-alert-template"><br />
  <span aria-label="This line has hidden Unicode characters" data-view-component="true" class="line-alert tooltipped tooltipped-e"><br />
    <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"></p>
<path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg><br />
</span></template></p>
<table data-hpc class="highlight tab-size js-file-line-container" data-tab-size="4" data-paste-markdown-skip data-tagsearch-path="Window1.js">
<tr>
<td id="file-window1-js-L1" class="blob-num js-line-number js-blob-rnum" data-line-number="1"></td>
<td id="file-window1-js-LC1" class="blob-code blob-code-inner js-file-line">module.exports = function(){</td>
</tr>
<tr>
<td id="file-window1-js-L2" class="blob-num js-line-number js-blob-rnum" data-line-number="2"></td>
<td id="file-window1-js-LC2" class="blob-code blob-code-inner js-file-line">
</td>
</tr>
<tr>
<td id="file-window1-js-L3" class="blob-num js-line-number js-blob-rnum" data-line-number="3"></td>
<td id="file-window1-js-LC3" class="blob-code blob-code-inner js-file-line">	var win = Ti.UI.createWindow({</td>
</tr>
<tr>
<td id="file-window1-js-L4" class="blob-num js-line-number js-blob-rnum" data-line-number="4"></td>
<td id="file-window1-js-LC4" class="blob-code blob-code-inner js-file-line">		backgroundColor:&#39;#fff&#39;,</td>
</tr>
<tr>
<td id="file-window1-js-L5" class="blob-num js-line-number js-blob-rnum" data-line-number="5"></td>
<td id="file-window1-js-LC5" class="blob-code blob-code-inner js-file-line">		title: &#39;win 1&#39;</td>
</tr>
<tr>
<td id="file-window1-js-L6" class="blob-num js-line-number js-blob-rnum" data-line-number="6"></td>
<td id="file-window1-js-LC6" class="blob-code blob-code-inner js-file-line">	});</td>
</tr>
<tr>
<td id="file-window1-js-L7" class="blob-num js-line-number js-blob-rnum" data-line-number="7"></td>
<td id="file-window1-js-LC7" class="blob-code blob-code-inner js-file-line">
</td>
</tr>
<tr>
<td id="file-window1-js-L8" class="blob-num js-line-number js-blob-rnum" data-line-number="8"></td>
<td id="file-window1-js-LC8" class="blob-code blob-code-inner js-file-line">
</td>
</tr>
<tr>
<td id="file-window1-js-L9" class="blob-num js-line-number js-blob-rnum" data-line-number="9"></td>
<td id="file-window1-js-LC9" class="blob-code blob-code-inner js-file-line">	var lbl = Ti.UI.createLabel({</td>
</tr>
<tr>
<td id="file-window1-js-L10" class="blob-num js-line-number js-blob-rnum" data-line-number="10"></td>
<td id="file-window1-js-LC10" class="blob-code blob-code-inner js-file-line">		text:&#39;This is Window 1&#39;,</td>
</tr>
<tr>
<td id="file-window1-js-L11" class="blob-num js-line-number js-blob-rnum" data-line-number="11"></td>
<td id="file-window1-js-LC11" class="blob-code blob-code-inner js-file-line">		color:&#39;#333&#39;</td>
</tr>
<tr>
<td id="file-window1-js-L12" class="blob-num js-line-number js-blob-rnum" data-line-number="12"></td>
<td id="file-window1-js-LC12" class="blob-code blob-code-inner js-file-line">	});</td>
</tr>
<tr>
<td id="file-window1-js-L13" class="blob-num js-line-number js-blob-rnum" data-line-number="13"></td>
<td id="file-window1-js-LC13" class="blob-code blob-code-inner js-file-line">
</td>
</tr>
<tr>
<td id="file-window1-js-L14" class="blob-num js-line-number js-blob-rnum" data-line-number="14"></td>
<td id="file-window1-js-LC14" class="blob-code blob-code-inner js-file-line">	win.add(lbl);</td>
</tr>
<tr>
<td id="file-window1-js-L15" class="blob-num js-line-number js-blob-rnum" data-line-number="15"></td>
<td id="file-window1-js-LC15" class="blob-code blob-code-inner js-file-line">
</td>
</tr>
<tr>
<td id="file-window1-js-L16" class="blob-num js-line-number js-blob-rnum" data-line-number="16"></td>
<td id="file-window1-js-LC16" class="blob-code blob-code-inner js-file-line">	return win;</td>
</tr>
<tr>
<td id="file-window1-js-L17" class="blob-num js-line-number js-blob-rnum" data-line-number="17"></td>
<td id="file-window1-js-LC17" class="blob-code blob-code-inner js-file-line">
</td>
</tr>
<tr>
<td id="file-window1-js-L18" class="blob-num js-line-number js-blob-rnum" data-line-number="18"></td>
<td id="file-window1-js-LC18" class="blob-code blob-code-inner js-file-line">}</td>
</tr>
</table>
</div></div>
</p></div>
</div></div>
<div class="gist-meta">
        <a href="https://gist.github.com/jaraen/3331472/raw/f4dfee80acfc139e396e44e60397f8c67818b914/Window1.js" style="float:right" class="Link--inTextBlock">view raw</a><br />
        <a href="https://gist.github.com/jaraen/3331472#file-window1-js" class="Link--inTextBlock"><br />
          Window1.js<br />
        </a><br />
        hosted with &#10084; by <a class="Link--inTextBlock" href="https://github.com">GitHub</a>
      </div>
</p></div>
</div>
<p>Es una ventana muy sencilla con una etiqueta. Como este módulo no tiene dependencias externas, no necesito llamar a ModulePaths ni ningún otro módulo. Simplemente crea una ventana de Titanium, le añade una etiqueta y devuelve la ventana.</p>
<p>Una de las ventajas de programar de esta manera, es que este módulo no se preocupa de cómo va a ser usado o por quién. En este caso, Window1 es instanciado por TabGroup en su línea 12, pero perfectamente nos la podríamos llevar a otro proyecto y reutilizarla sin a penas cambios.</p>
<h4>ModulePaths.js</h4>
<p>Como decía antes, el uso de un fichero índice de todos los ficheros del proyecto no es obligatorio. Perfectamente podríamos haber llamado cada ventana por su senda en TabGroup de este modo</p>
<div class="codecolorer-container javascript mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:600px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> Window1 <span style="color: #339933;">=</span> require<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'/app/ui/Window1'</span><span style="color: #009900;">&#41;</span></div></td></tr></tbody></table></div>
<p>Sin embargo el uso de ModulePaths tiene varias ventajas.</p>
<p>Primero, que a medida que nuestro proyecto crezca, no necesitaremos recordar todas las sendas y nombres de archivo, sólo un identificador que asignaremos a cada módulo.</p>
<p>Segundo, que en proyectos complejos, podremos cambiar una versión de un fichero por otra, simplemente cambiando el nombre en ModulePaths. Por ejemplo, si tenemos un componente llamado VideoPlayer y queremos hacer pruebas con un fichero distinto sin modificar todo el proyecto, cambiaremos la senda en ModulePaths a un fichero nuevo (por ejemplo, VideoPlayerTest.js) y todo el proyecto cogerá esta referencia.</p>
<p>Tercero, más de una vez ocurre que hay que cambiar la estructura de carpetas de un proyecto. Si esto ocurriera, podemos mover los ficheros tranquilamente y después tan sólo tenemos que actualizar este fichero, y no cada módulo del proyecto.</p>
<p>Una última ventaja, si piensas desarrollar para mobile web, es que las sendas en esta plataforma no pueden empezar con la barra /, cosa que sí ocurre en el resto de plataformas. Trabajando con ModulePaths, podemos gestionar fácilmente estas diferencias.</p>
<div id="gist3331472" class="gist">
<div class="gist-file" translate="no" data-color-mode="light" data-light-theme="light">
<div class="gist-data">
<div class="js-gist-file-update-container js-task-list-container">
<div id="file-modulepaths-js" class="file my-2">
<div itemprop="text"
      class="Box-body p-0 blob-wrapper data type-javascript  "
      style="overflow: auto" tabindex="0" role="region"
      aria-label="ModulePaths.js content, created by jaraen on 11:24AM on August 12, 2012."
    ></p>
<div class="js-check-hidden-unicode js-blob-code-container blob-code-content">
<p>  <template class="js-file-alert-template"></p>
<div data-view-component="true" class="flash flash-warn flash-full d-flex flex-items-center">
  <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"></p>
<path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg><br />
    <span><br />
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.<br />
      <a class="Link--inTextBlock" href="https://github.co/hiddenchars" target="_blank">Learn more about bidirectional Unicode characters</a><br />
    </span></p>
<div data-view-component="true" class="flash-action">        <a href="{{ revealButtonHref }}" data-view-component="true" class="btn-sm btn">    Show hidden characters<br />
</a>
</div>
</div>
<p></template><br />
<template class="js-line-alert-template"><br />
  <span aria-label="This line has hidden Unicode characters" data-view-component="true" class="line-alert tooltipped tooltipped-e"><br />
    <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"></p>
<path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg><br />
</span></template></p>
<table data-hpc class="highlight tab-size js-file-line-container" data-tab-size="4" data-paste-markdown-skip data-tagsearch-path="ModulePaths.js">
<tr>
<td id="file-modulepaths-js-L1" class="blob-num js-line-number js-blob-rnum" data-line-number="1"></td>
<td id="file-modulepaths-js-LC1" class="blob-code blob-code-inner js-file-line">//avoid initial slash in paths under mobileweb platform</td>
</tr>
<tr>
<td id="file-modulepaths-js-L2" class="blob-num js-line-number js-blob-rnum" data-line-number="2"></td>
<td id="file-modulepaths-js-LC2" class="blob-code blob-code-inner js-file-line">
</td>
</tr>
<tr>
<td id="file-modulepaths-js-L3" class="blob-num js-line-number js-blob-rnum" data-line-number="3"></td>
<td id="file-modulepaths-js-LC3" class="blob-code blob-code-inner js-file-line">var firstSeparator = (Ti.Platform.name === &#39;mobileweb&#39;) ? &#39;&#39; : &#39;/&#39;;</td>
</tr>
<tr>
<td id="file-modulepaths-js-L4" class="blob-num js-line-number js-blob-rnum" data-line-number="4"></td>
<td id="file-modulepaths-js-LC4" class="blob-code blob-code-inner js-file-line">
</td>
</tr>
<tr>
<td id="file-modulepaths-js-L5" class="blob-num js-line-number js-blob-rnum" data-line-number="5"></td>
<td id="file-modulepaths-js-LC5" class="blob-code blob-code-inner js-file-line">var ui = firstSeparator + &#39;app/ui/&#39;;</td>
</tr>
<tr>
<td id="file-modulepaths-js-L6" class="blob-num js-line-number js-blob-rnum" data-line-number="6"></td>
<td id="file-modulepaths-js-LC6" class="blob-code blob-code-inner js-file-line">
</td>
</tr>
<tr>
<td id="file-modulepaths-js-L7" class="blob-num js-line-number js-blob-rnum" data-line-number="7"></td>
<td id="file-modulepaths-js-LC7" class="blob-code blob-code-inner js-file-line">module.exports = {</td>
</tr>
<tr>
<td id="file-modulepaths-js-L8" class="blob-num js-line-number js-blob-rnum" data-line-number="8"></td>
<td id="file-modulepaths-js-LC8" class="blob-code blob-code-inner js-file-line">	TABGROUP: ui + &#39;TabGroup&#39;,</td>
</tr>
<tr>
<td id="file-modulepaths-js-L9" class="blob-num js-line-number js-blob-rnum" data-line-number="9"></td>
<td id="file-modulepaths-js-LC9" class="blob-code blob-code-inner js-file-line">	WINDOW1:  ui + &#39;Window1&#39;,</td>
</tr>
<tr>
<td id="file-modulepaths-js-L10" class="blob-num js-line-number js-blob-rnum" data-line-number="10"></td>
<td id="file-modulepaths-js-LC10" class="blob-code blob-code-inner js-file-line">	WINDOW2:  ui + &#39;Window2&#39;,</td>
</tr>
<tr>
<td id="file-modulepaths-js-L11" class="blob-num js-line-number js-blob-rnum" data-line-number="11"></td>
<td id="file-modulepaths-js-LC11" class="blob-code blob-code-inner js-file-line">	WINDOW3:  ui + &#39;Window3&#39;,</td>
</tr>
<tr>
<td id="file-modulepaths-js-L12" class="blob-num js-line-number js-blob-rnum" data-line-number="12"></td>
<td id="file-modulepaths-js-LC12" class="blob-code blob-code-inner js-file-line">
</td>
</tr>
<tr>
<td id="file-modulepaths-js-L13" class="blob-num js-line-number js-blob-rnum" data-line-number="13"></td>
<td id="file-modulepaths-js-LC13" class="blob-code blob-code-inner js-file-line">	STYLES: ui + &#39;Styles&#39;</td>
</tr>
<tr>
<td id="file-modulepaths-js-L14" class="blob-num js-line-number js-blob-rnum" data-line-number="14"></td>
<td id="file-modulepaths-js-LC14" class="blob-code blob-code-inner js-file-line">
</td>
</tr>
<tr>
<td id="file-modulepaths-js-L15" class="blob-num js-line-number js-blob-rnum" data-line-number="15"></td>
<td id="file-modulepaths-js-LC15" class="blob-code blob-code-inner js-file-line">}</td>
</tr>
</table>
</div></div>
</p></div>
</div></div>
<div class="gist-meta">
        <a href="https://gist.github.com/jaraen/3331472/raw/f4dfee80acfc139e396e44e60397f8c67818b914/ModulePaths.js" style="float:right" class="Link--inTextBlock">view raw</a><br />
        <a href="https://gist.github.com/jaraen/3331472#file-modulepaths-js" class="Link--inTextBlock"><br />
          ModulePaths.js<br />
        </a><br />
        hosted with &#10084; by <a class="Link--inTextBlock" href="https://github.com">GitHub</a>
      </div>
</p></div>
</div>
<p>Como ves, el fichero únicamente asigna una senda a una clave que después es la que llamamos desde los módulos (por ejemplo Mods.WINDOW1 o Mods.TABGROUP).</p>
<h4>Y para terminar&#8230;</h4>
<p>Te recomiendo que vuelvas al código de app.js y vuelvas a leerlo desde el principio, ahora que ya sabes lo que contiene cada módulo te resultará más fácil entenderlo. El objetivo es dividir el código en partes funcionales lo más pequeñas posibles, lo que te permitirá crear código que reutilizarás con más facilidad en tus proyectos y mejorarán cuanto más los uses.</p>
<p>Y esto es todo! Puedes descargar el proyecto completo desde mi github en <a href="https://github.com/jaraen/TabGroupTemplate" target="_blank">https://github.com/jaraen/TabGroupTemplate</a></p>
<p>&nbsp;</p>
<div id="attachment_551" style="width: 310px" class="wp-caption aligncenter"><a href="http://www.criteriastudio.com/wp-content/uploads/2012/08/Captura-de-pantalla-2012-08-12-a-las-13.51.07.png"><img class="size-medium wp-image-551" title="App funcionando en el simulador de android" src="http://www.criteriastudio.com/wp-content/uploads/2012/08/Captura-de-pantalla-2012-08-12-a-las-13.51.07-300x226.png" alt="" width="300" height="226" /></a>
<p class="wp-caption-text">App funcionando en el simulador de android</p>
</div>
<p>&nbsp;</p>
<div id="attachment_550" style="width: 169px" class="wp-caption aligncenter"><a href="http://www.criteriastudio.com/wp-content/uploads/2012/08/Captura-de-pantalla-2012-08-12-a-las-13.49.51.png"><img class="size-medium wp-image-550" title="App funcionando en el simulador de iPhone" src="http://www.criteriastudio.com/wp-content/uploads/2012/08/Captura-de-pantalla-2012-08-12-a-las-13.49.51-159x300.png" alt="" width="159" height="300" /></a>
<p class="wp-caption-text">App funcionando en el simulador de iPhone</p>
</div>
<div id="attachment_552" style="width: 218px" class="wp-caption aligncenter"><a href="http://www.criteriastudio.com/wp-content/uploads/2012/08/Captura-de-pantalla-2012-08-12-a-las-13.52.02.png"><img class="size-medium wp-image-552" title="App funcionando en el navegador" src="http://www.criteriastudio.com/wp-content/uploads/2012/08/Captura-de-pantalla-2012-08-12-a-las-13.52.02-208x300.png" alt="" width="208" height="300" /></a>
<p class="wp-caption-text">App funcionando en el navegador</p>
</div>
]]></content:encoded>
			<wfw:commentRss>https://www.criteriastudio.com/app-template-para-titanium/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>
