Sencha Touch - Guía rápida
Sencha Touch es un marco popular de Sencha para crear una interfaz de usuario para aplicaciones móviles. Ayuda al desarrollador a crear una aplicación móvil usando HTML simple, CSS, JS que es compatible con muchos dispositivos móviles como Android, IOS, BlackBerry y Windows. Está basado en la arquitectura MVC. La última versión de Sencha Touch es 2.4.
Historia de Sencha Touch
Después de lanzar el otro producto de Sencha, ExtJs, que era para aplicaciones web, existía la necesidad de desarrollar un marco que también funcionara en dispositivos móviles.
La primera versión de Sencha Touch fue la versión beta 0.9, que admitía dispositivos Android e IOS. Más tarde, el primer lanzamiento principal de Sencha Touch versión 1.0 fue en noviembre de 2010, que fue la primera versión estable y también admitió dispositivos Blackberry.
La última versión de Sencha Touch es la versión 2.4 lanzada en junio de 2015, que admite muchos dispositivos como Windows, Tizen junto con Android, IOS, BlackBerry OS 10, Google Chrome para Android y Safari móvil, etc.
Características de Sencha Touch
Las siguientes son las características más destacadas de Sencha Touch:
Personalizable y más de 50 widgets de interfaz de usuario integrados con una colección de interfaces de usuario enriquecidas como listas, carruseles, formularios, menús y barras de herramientas, creadas específicamente para plataformas móviles.
Compatibilidad de código de nuevas versiones con la anterior.
Un administrador de diseño flexible que ayuda a organizar la visualización de datos y contenido en múltiples dispositivos móviles con diferentes sistemas operativos.
El marco incluye un paquete de datos robusto que puede consumir datos de cualquier fuente de datos backend.
Diseños adaptables, animaciones y desplazamiento suave para una mejor experiencia de uso de aplicaciones web móviles.
Los temas de apariencia nativa listos para usar para todas las plataformas principales permiten hacer que las aplicaciones web e híbridas coincidan con la apariencia de las plataformas de destino.
Sencha Touch ─ Beneficios
Sencha Touch es el estándar líder para el desarrollo de aplicaciones web de nivel empresarial. Ofrece las herramientas necesarias para crear aplicaciones robustas para la mayoría de los dispositivos móviles, proporcionando una plataforma única para desarrollar aplicaciones. A continuación se presentan algunos de los beneficios:
Proporciona una función táctil sensible, por lo que el usuario puede navegar fácilmente mientras usa la aplicación móvil.
Proporciona compatibilidad con todas las últimas versiones de IOS, Android y Blackberry y Windows.
Proporciona la velocidad más rápida posible deseable para cualquier aplicación móvil.
Proporciona una solución rentable con su compatibilidad multiplataforma.
Basado en las API nativas y lenguajes de desarrollo web básicos como HTML, CSS, JS, lo que facilita que un desarrollador comprenda Sencha Touch.
Sencha Touch ─ Limitaciones
Sencha Touch API no tiene la siguiente capacidad:
La aplicación no tiene acceso a la cámara, los contactos y el acelerómetro del dispositivo.
No proporciona la función de notificación automática. Para ello, tenemos que utilizar websockets o long polling.
De acuerdo con la política de licencia pública general, es gratuito para aplicaciones de código abierto, pero se paga para aplicaciones comerciales.
No es bueno para aplicaciones de animación y gráficos intensos, como aplicaciones de juegos.
Sencha Touch ─ Herramientas
Sencha SDK
Este es el kit de desarrollo de Sencha que se utiliza para crear un esqueleto del proyecto. Usamos el comando "sencha -sdk path / to / touch generate app appName" para crear una aplicación con el nombre dado en el comando.
Cuando se crea la aplicación, puede ver los siguientes archivos en la aplicación:
app - Esta carpeta contiene archivos de modelo, vista, controlador y tienda para la aplicación.
app.js- Este es el archivo JS principal de su aplicación. A partir de este archivo, se inicia el flujo de código Sencha.
app.json - Este es el archivo de configuración de la aplicación, todos los detalles de configuración se presentan aquí.
index.html - Este es el archivo html principal donde incluimos el app.js y otros archivos relacionados con Sencha.
package.json - Este archivo tiene toda la dependencia y otra información relacionada con la aplicación.
resources - Esta carpeta incluye todos los archivos CSS e imágenes necesarios para la aplicación.
Sencha CMD
Sencha CMD es una herramienta de línea de comandos, que proporciona las funciones de minificación de código Sencha Touch, andamios, generación de compilación y otras funciones útiles para fines de producción.
Usamos el comando "Paquete de compilación de la aplicación Sencha" en el símbolo del sistema para compilar la aplicación para esto. Vaya al directorio de la aplicación en el símbolo del sistema y escriba el comando anterior. Una vez que la compilación sea exitosa, veremos la versión minificada de la aplicación que se usa básicamente para fines de producción.
Esto se puede descargar desde https://www.sencha.com/products/extjs/cmd-download/
Inspector Sencha
Sencha Inspector es una herramienta de depuración para depurar cualquier problema en el código Sencha durante el desarrollo.
Configuración del entorno local
Esta sección le guía sobre cómo descargar y configurar Sencha Touch en su máquina. Siga los pasos para configurar el entorno.
Descarga de archivos de la biblioteca
Descargue una versión comercial de los archivos de la biblioteca Sencha Touch desde el siguiente enlace https://www.sencha.com. Obtendrá la versión de prueba del sitio en su identificación de correo registrada, que será una carpeta comprimida llamada sencha-touch-2.4.2-commercial.
Descomprima la carpeta y encontrará varios archivos JavaScript y CSS para incluir en su aplicación. Incluye principalmente los siguientes archivos:
Javascript Files - El archivo JS que puede encontrar en la carpeta \ sencha-touch-2.4.2commercial \ touch-2.4.2 son -
No Señor | Descripción del archivo |
---|---|
1 | sencha-touch.js Este es el archivo principal que contiene todas las funcionalidades para ejecutar la aplicación. |
2 | sencha-touch-all.js Este archivo contiene todo el código minimizado sin comentarios en el archivo. |
3 | sencha-touch-debug.js Esta es la versión no minificada de sencha-touch-all.js con fines de depuración. |
4 | sencha-touch-all-debug.js Este archivo tampoco está minimizado y se utiliza con fines de desarrollo, ya que contiene todos los comentarios y registros de la consola para comprobar cualquier error / problema. |
Puede agregar estos archivos a la carpeta JS de su proyecto o puede proporcionar una ruta directa donde residen los archivos en su sistema.
CSS Files - Hay varios archivos basados en temas que puede encontrar en la carpeta I: \ sencha touch \ sencha-touch-2.4.2-commercial \ touch-2.4.2 \ resources \ css \ sencha-touch.css
Estos archivos de biblioteca se agregarán en la aplicación Sencha Touch de la siguiente manera:
<html>
<head>
<script type = "text/javascript" src = "../sencha-touch-2.4.2-commercial/touch-2.4.2/sencha-touch-all.js"></script>
<link href = "../sencha-touch-2.4.2-commercial/touch-2.4.2/resources/css/sencha-touch.css" rel = "stylesheet" />
<script type ="text/javascript" src = "app.js" > </script>
</head>
</html>
Puede mantener el código de la aplicación Sencha Touch en el archivo app.js.
Configuración de CDN
CDN es una red de entrega de contenido con la que no necesita descargar los archivos de la biblioteca Sencha Touch, sino que puede agregar directamente el enlace CDN para ExtJS a su programa de la siguiente manera:
<html>
<head>
<script type = "text/javascript" src = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/sencha-touch-all.js"></script>
<link href = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/sencha-touch.css" rel="stylesheet" />
<script type = "text/javascript" src = "app.js" > </script>
</head>
</html>
Editores populares
Como es un marco de JavaScript utilizado para desarrollar aplicaciones web, el proyecto tendrá HTML, archivos JS, y para escribir sus programas Ext JS, necesitará un editor de texto. Hay varios IDE disponibles en el mercado. Pero por ahora, puede considerar uno de los siguientes:
Notepad - En una máquina con Windows, puede usar cualquier editor de texto simple como el Bloc de notas (recomendado para este tutorial), el Bloc de notas ++.
Brackets - Otro IDE popular que se puede descargar desde http://brackets.io/ .
Sublime - Otro IDE popular que se puede descargar desde https://www.sublimetext.com/3/ .
Naming conventiones un conjunto de reglas que se deben seguir para los identificadores. También hace que el código sea fácilmente legible y comprensible para otros programadores.
La convención de nomenclatura en Sencha Touch sigue la convención estándar de JavaScript, que no es obligatoria, pero es una buena práctica a seguir. Debe seguir la sintaxis de mayúsculas y minúsculas para nombrar la clase, el método, la variable y las propiedades.
Si el nombre se combina con dos palabras, la segunda palabra comenzará siempre con una letra mayúscula. Por ejemplo, doLayout (), StudentForm, firstName, etc.
No Señor. | Nombre y Convención |
---|---|
1 | Class Name Debe comenzar con una letra mayúscula, seguida de un camello. Por ejemplo, StudentClass |
2 | Method Name Debe comenzar con una letra minúscula, seguida de un camello. Por ejemplo, studentMethod () |
3 | Variable Name Debe comenzar con una letra minúscula, seguida de un camello. Por ejemplo, studentName |
4 | Constant Name Debe estar solo en mayúsculas. Por ejemplo, COUNT, MAX_VALUE |
5 | Property Name Debe comenzar con una letra minúscula, seguida de un camello. Por ejemplo, enableColumnResize = true |
La capa inferior para cualquier aplicación móvil es el sistema operativo, además de que todo o cualquier cosa está construido. Luego tenemos los navegadores en los que ejecutaremos las aplicaciones. Podría ser Chrome, Safari, IE cualquier cosa. La capa superior es un estándar W3, que es común para todos. Sencha Touch se basa o se basa en los estándares W3, que no es más que HTML5, lo que hace que una sola aplicación sea compatible con diferentes navegadores de diferentes dispositivos.
Sencha Touch es una combinación de tres marcos: ExtJs, JqTouch y Raphael (dibujo vectorial). Sigue la arquitectura MVC. MVC separa el código en fragmentos más manejables.
Aunque la arquitectura no es obligatoria para el programa, sin embargo, es una buena práctica seguir esta estructura para que su código sea altamente mantenible y organizado.
Estructura del proyecto con la aplicación Sencha Touch
----------src
----------resources
-------------------CSS files
-------------------Images
----------JavaScript
--------------------App Folder
-------------------------------Controller
------------------------------------Contoller.js
-------------------------------Model
------------------------------------Model.js
-------------------------------Store
------------------------------------Store.js
-------------------------------View
------------------------------------View.js
-------------------------------Utils
------------------------------------Utils.js
--------------------------------app.js
-----------HTML files
La carpeta de la aplicación Sencha Touch residirá en la carpeta JavaScript de su proyecto.
La aplicación contendrá archivos de controlador, vista, modelo, tienda y utilidades con app.js.
app.js- El archivo principal desde donde comenzará el flujo del programa. Debe incluirse en el archivo HTML principal usando la etiqueta <script>. La aplicación llama al controlador de la aplicación para el resto de la funcionalidad.
Controller.js- Es el archivo controlador de la arquitectura Sencha Touch MVC. Contiene todo el control de la aplicación, los oyentes de eventos y la mayor parte de la funcionalidad del código. Realiza las siguientes tareas: enrutamiento, intermedio entre vista y modelo, y ejecuta eventos.
View.js- Contiene la parte de la interfaz de la aplicación, que se muestra al usuario. Sencha Touch utiliza varias vistas enriquecidas de IU, que se pueden ampliar y personalizar según los requisitos.
Store.js- Contiene los datos almacenados en caché local, que se mostrarán a la vista con la ayuda de objetos modelo. Store obtiene los datos mediante proxies, que tiene la ruta definida para que los servicios obtengan los datos del backend.
Model.js- Contiene los objetos que vinculan los datos de la tienda a ver. Es la representación del objeto del mundo real, que básicamente se ocupa de la base de datos.
Utils.js- No está incluido en la arquitectura MVC, pero es una buena práctica usarlo para hacer que el código sea más limpio, menos complejo y más legible. Podemos escribir métodos en este archivo y llamarlos en el controlador o en el renderizador de vista donde sea necesario. También es útil para fines de reutilización de código.
MVC son las siglas de Model View Controller. Es un patrón arquitectónico que separa la aplicación en componentes lógicos haciéndola más manejable.
El siguiente diagrama muestra cómo funciona la arquitectura MVC:
Controller - El controlador controla toda la aplicación, notifica a la vista si se cambia el modelo y realiza acciones basadas en las entradas del usuario.
View- Contiene la parte de la interfaz de la aplicación que es visual para el usuario. Notifica al controlador para cambiar el modelo en la entrada del usuario.
Model- Contiene los objetos que vinculan los datos de la tienda a ver. Es la representación del objeto del mundo real que básicamente se ocupa de la base de datos. También notifica al controlador sobre cualquier cambio en la vista.
En este capítulo, enumeraremos los pasos para escribir el primer programa Hello World en Ext JS.
Paso 1
Cree una página index.htm en un editor de nuestra elección. Incluya los archivos de biblioteca requeridos en la sección de cabecera de la página html de la siguiente manera.
index.htm
<!DOCTYPE html>
<html>
<head>
<link href = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/sencha-touch.css" rel = "stylesheet" />
<script type = "text/javascript" src = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/sencha-touch-all.js">
</script>
<script type = "text/javascript">
Ext.application( {
name: 'Sencha', launch: function() {
Ext.create("Ext.tab.Panel", {
fullscreen: true, items: [{
title: 'Home', iconCls: 'home', html: 'Welcome to sencha touch'
}]
});
}
});
</script>
</head>
<body>
</body>
</html>
Explicación
El método Ext.application () es el punto de partida de la aplicación Sencha Touch. Crea una variable global llamada 'Sencha' declarada con la propiedad name: todas las clases de la Aplicación, como sus Modelos, Vistas y Controladores, residirán bajo este espacio de nombres único, lo que reduce las posibilidades de colisión de variables globales y nombres de archivos.
Se llama al método launch () una vez que la página está lista y todos los archivos JavaScript están cargados.
El método Ext.create () se utiliza para crear un objeto en Sencha Touch. Aquí, estamos creando un objeto de clase de panel simple Ext.tab.Panel.
Ext.tab.Panel es la clase predefinida en Sencha Touch para crear un panel.
Cada clase Sencha Touch tiene diferentes propiedades para realizar algunas funcionalidades básicas.
La clase Ext.Panel tiene varias propiedades como:
fullscreen propiedad es hacer uso de una pantalla completa, por lo tanto, el panel ocupará el espacio de pantalla completa.
items La propiedad es el contenedor de varios elementos.
iconCls es la clase utilizada para mostrar diferentes iconos.
title propiedad es proporcionar el título al panel.
html propiedad es el contenido html que se mostrará en el panel.
Paso 2
Abra el archivo index.htm en un navegador estándar y obtendrá el siguiente resultado.
La demanda actual de una aplicación web es desarrollar una aplicación rápida con menos esfuerzos de desarrollo. Sencha Touch ayuda a hacerlo con facilidad, ya que proporciona una serie de bibliotecas de compilación para elegir, según el código de desarrollo o producción junto con la posibilidad de crear una compilación personalizada.
Las bibliotecas de compilación de Sencha Touch cargan las clases de forma dinámica. La carga dinámica se refiere a las clases que se cargan cuando es necesario y solo se incluirán aquellas clases que sean necesarias en la aplicación. Esto hace que la aplicación se ejecute más rápido a medida que se reduce la cantidad de archivos a cargar, lo que al mismo tiempo disminuye el tiempo de carga.
Sencha Touch 2.x proporciona las siguientes cinco bibliotecas de compilación.
No Señor. | Construcciones y uso |
---|---|
1 | sencha-touchdebug.js Esta compilación se utiliza al desarrollar la aplicación localmente. Es una versión no reducida con todos los comentarios y registros de depuración para facilitar la depuración durante el desarrollo. |
2 | senchatouch.js Este archivo se utiliza para fines de producción. Es la versión minificada cuando tenemos una compilación personalizada. |
3 | sencha-touchall.js Este archivo se utiliza para fines de producción. Es la versión minificada cuando no tenemos una compilación personalizada. |
4 | sencha-touchall-debug.js Este archivo se utiliza para depurar en producción. No está minimizado y tiene todos los comentarios y registros de depuración. |
5 | sencha-touchall-compat.js Esta compilación se utiliza para migrar la versión 1.xa la versión 2.x. Da una advertencia cuando el código de la versión 1.x no es compatible y necesita modificación de código. |
Con las compilaciones mencionadas anteriormente, Sencha Touch ofrece la posibilidad de crear compilaciones personalizadas.
Ventajas de tener una construcción personalizada
La compilación personalizada no carga todos los archivos táctiles. Carga solo los archivos que estamos usando en la aplicación, lo que hace que la aplicación sea más rápida y fácil de mantener.
Sencha CMD se utiliza para crear una compilación personalizada. Para crear una compilación personalizada en Sencha CMD, vaya al directorio donde reside el archivo de la aplicación y escriba uno de los siguientes comandos para crear una compilación.
No Señor. | Comando y uso |
---|---|
1 | sencha app build native Compila la aplicación y prepara un archivo llamado packager.temp.json que puede usar para empaquetar una aplicación; el packager.temp.json es el mismo que packager.json, pero contiene rutas adicionales. |
2 | sencha app build -run native Construye y empaqueta automáticamente la aplicación e inicia el simulador apropiado. |
3 | sencha app build package Crea la aplicación con soporte de empaquetado, pero no configura un archivo JSON empaquetador. Esto es útil para proyectos que mantienen manualmente varios archivos packager.json. |
Una vez que la compilación sea exitosa, generará el archivo all-classes.js que debemos incluir en nuestro index.html para que esté listo para producción.
El siguiente código muestra los cambios que se deben realizar para el código listo para producción.
Index.html before building application
<!DOCTYPE html>
<html>
<head>
<link href = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/sencha-touch.css" rel = "stylesheet" />
<script type = "text/javascript" src = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/sencha-touch-debug.js"></script>
<script type = "text/javascript" src = "app.js"> </script>
</head>
<body>
</body>
</html>
Index.html after building the application
<!DOCTYPE html>
<html>
<head>
<link href = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/sencha-touch.css" rel = "stylesheet" />
<script type = "text/javascript" src = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/sencha-touch.js"></script>
<script type = "text/javascript" src = "app.js"> </script>
<script type = "text/javascript" src = "app-classes.js"> </script>
</head>
<body>
</body>
</html>
Sencha Touch viene con varias rectificaciones de la versión anterior.
Sencha Touch 2 viene con la compilación de compatibilidad con versiones anteriores, lo que facilita el proceso de migración de la versión 1.xa 2.x.
Esta compilación simplemente facilita el trabajo al proporcionar una advertencia y los registros cada vez que se produce un problema de migración o se requiere un cambio de código, de modo que el usuario sepa dónde se deben realizar los cambios, para asegurarse de que la aplicación funcione con la última versión.
La migración de Sencha Touch 2.x requiere los siguientes cambios de código.
Sistema de clases
Code in Sencha Touch 1.x -
MyApp.view.StudentPanel = Ext.extend(Ext.Panel, {
scroll: 'vertical',
html: 'Student Panel'
initComponent: function() {
Ext.getCmp('StudentIdDiv').update('This is a Student panel');
}
});
Code in Sencha Touch 2.x -
Ext.define('MyApp.view.StudentPanel', {
extend: 'Ext.Panel',
config: {
scroll: 'vertical',
html: 'Student Panel'
},
initialize: function() {
Ext.getCmp('StudentIdDiv').setHtml('This is a Student panel')
}
});
Al observar ambas versiones, puede ver que la forma de crear clases son cambios que ahora están inspirados en ExtJ como:
Ext.extend se cambia a Ext.define.
Todos los parámetros de configuración relacionados con la clase ahora se definen en el parámetro de configuración.
El initComponent se cambia al método initialize ().
En Sencha Touch 2.x, podemos tener las funciones setHtml () y getHtml () para actualizar html o para obtener el valor.
Arquitectura MVC
El código Sencha Touch 1.x era modular y se basaba en la arquitectura MVC. Sencha Touch 2.x sigue una sintaxis diferente para escribir modelo, vista y controlador. Veamos la diferencia de archivos de modelo, vista y controlador en diferentes versiones.
Modelo
Code in Sencha Touch 1.x -
Ext.regModel('MyApp.model.StudentModel', {
fields: [
{name: 'name', type: 'string'},
{name: 'age', type: 'int'}
]
});
Code in Sencha Touch 2.x -
Ext.define('MyApp.model.StudentModel', {
extend: 'Ext.data.Model', config: {
fields: [
{name: 'name', type: 'string'},
{name: 'age', type: 'int'}
]
}
});
Ext.regModel se cambia a Ext.define que extiende Ext.data.Model.
Todos los campos vienen bajo la sección de configuración ahora en la versión 2.x.
Ver
Code in Sencha Touch 1.x -
Ext.Panel("studentView", {
items: [{}]
});
Code in Sencha Touch 2.x -
Ext.define('MyApp.view.StudentView', {
extend: 'Ext.tab.Panel',
items: [{}]
});
La vista es casi la misma, el único cambio es que el nombre de la vista sigue el espacio de nombres de la versión 2.x, como Myapp.view.StudentView, y el código se escribe en el método Ext.define como modelo similar.
Controlador
Code in Sencha Touch 1.x -
Ext.regController("studentController", {
someMethod: function() {
alert('Method is called');
}
});
Code in Sencha Touch 2.x -
Ext.define('MyApp.controller.studentController', {
extend: 'Ext.app.Controller', someMethod: function() {
alert('Method is called');
}
});
Igual que el modelo en el controlador. Además, Ext.regController se cambia a Ext.define, que extiende Ext.app.Controller.
Solicitud
Code in Sencha Touch 1.x -
Ext.application({
name: 'MyApp',
launch: function() {
Ext.create('MyApp.view.StudentView');
}
});
Code in Sencha Touch 2.x -
Ext.application({
name: 'MyApp',
models: ['studentModel'],
controllers: ['studentController'],
views: ['studentView'],
stores: ['studentStore'],
launch: function() {
Ext.create('MyApp.view.Main');
}
});
La principal diferencia entre la versión 1.xy la versión 2.x es que en 2.x declaramos todos los modelos, vistas, controladores y tiendas en la propia aplicación.
Sencha Touch tiene varios conceptos básicos, como sistema de clases, ajax, controladores, etc.
La siguiente tabla enumera el enlace para los conceptos básicos de Sencha Touch.
No Señor. | Enlace de concepto y descripción |
---|---|
1 | Sistema de clases |
2 | Componentes |
3 | Controladores |
4 | Soporte BlackBerry |
5 | Uso de Ajax |
El paquete de datos en Sencha Touch se encarga de realizar cualquier tipo de manipulación de datos ya sea almacenando o cargando los datos.
Los paquetes de datos están relacionados con el modelo, la tienda y los proxies.
No Señor. | Enlace de concepto y descripción |
---|---|
1 | Model Es la recopilación de datos y campos con los que mostramos todos los valores en la interfaz de usuario. Descripción |
2 | Store Es una colección de instancias modelo que básicamente almacena los datos localmente. En la tienda escribimos todos los eventos y las llamadas de descanso para obtener datos. Descripción |
3 | Proxy Básicamente se encarga de cargar los datos en la tienda. Principalmente usamos proxy ajax para cargar datos de la tienda. Descripción |
Sencha Touch proporciona una serie de temas para usar en sus aplicaciones. Puede agregar diferentes temas en lugar del tema clásico y ver la diferencia en la salida según el dispositivo que estamos usando para la aplicación. Esto se hace simplemente reemplazando el archivo CSS del tema como se explica en el siguiente ejemplo.
Tema de escritorio
Considere su primera aplicación Hello World. El siguiente CSS de la aplicación se utiliza para el tema de escritorio.
https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/sencha-touch.css
Para ver el efecto, pruebe el siguiente programa:
<!DOCTYPE html>
<html>
<head>
<link href = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/sencha-touch.css" rel = "stylesheet" />
<script type="text/javascript" src = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/sencha-touch-all.js"></script>
<script type = "text/javascript">
Ext.application({
name: 'Sencha',
launch: function() {
Ext.create("Ext.tab.Panel", {
fullscreen: true,
items: [{
title: 'Home',
iconCls: 'home',
html: 'Welcome to sencha touch'
}]
});
}
});
</script>
</head>
</html>
Esto producirá el siguiente resultado:
Tema de Windows
Considere su primera aplicación Hello World. Elimine el siguiente CSS de la aplicación:
https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/sencha-touch.css
Agregue el siguiente CSS para usar el tema de Windows.
https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/wp.css
Para ver el efecto, pruebe el siguiente programa:
<!DOCTYPE html>
<html>
<head>
<link href = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/wp.css" rel = "stylesheet" />
<script type = "text/javascript" src = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/sencha-touch-all.js"></script>
<script type = "text/javascript">
Ext.application({
name: 'Sencha',
launch: function() {
Ext.create("Ext.tab.Panel", {
fullscreen: true,
items: [{
title: 'Home',
iconCls: 'home',
html: 'Welcome to sencha touch'
}]
});
}
});
</script>
</head>
</html>
Esto producirá el siguiente resultado:
Tema de iOS
Considere su primera aplicación Hello World. Elimine el siguiente CSS de la aplicación.
https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/sencha-touch.css
Agregue el siguiente CSS para usar el tema de Windows
https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/cupertino.css
Para ver el efecto, pruebe el siguiente programa:
<!DOCTYPE html>
<html>
<head>
<link href = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/cupertino.css" rel = "stylesheet" />
<script type = "text/javascript" src = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/sencha-touch-all.js"></script>
<script type = "text/javascript">
Ext.application({
name: 'Sencha',
launch: function() {
Ext.create("Ext.tab.Panel", {
fullscreen: true,
items: [{
title: 'Home',
iconCls: 'home',
html: 'Welcome to sencha touch'
}]
});
}
});
</script>
</head>
</html>
Esto producirá el siguiente resultado:
Tema clásico de iOS
Considere su primera aplicación Hello World. Elimine el siguiente CSS de la aplicación:
https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/sencha-touch.css
Agregue el siguiente CSS para usar el tema de Windows:
https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/cupertino-classic.css
Para ver el efecto, pruebe el siguiente programa:
<!DOCTYPE html>
<html>
<head>
<link href = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/cupertino-classic.css" rel = "stylesheet" />
<script type = "text/javascript" src = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/sencha-touch-all.js"></script>
<script type = "text/javascript">
Ext.application({
name: 'Sencha',
launch: function() {
Ext.create("Ext.tab.Panel", {
fullscreen: true,
items: [{
title: 'Home',
iconCls: 'home',
html: 'Welcome to sencha touch'
}]
});
}
});
</script>
</head>
</html>
Esto producirá el siguiente resultado:
Tema de Android
Considere su primera aplicación Hello World. Elimine el siguiente CSS de la aplicación.
https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/sencha-touch.css
Agregue el siguiente CSS para usar el tema de Windows.
https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/mountainview.css
Para ver el efecto, pruebe el siguiente programa:
<!DOCTYPE html>
<html>
<head>
<link href = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/mountainview.css" rel = "stylesheet" />
<script type = "text/javascript" src = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/sencha-touch-all.js"></script>
<script type = "text/javascript">
Ext.application({
name: 'Sencha',
launch: function() {
Ext.create("Ext.tab.Panel", {
fullscreen: true,
items: [{
title: 'Home',
iconCls: 'home',
html: 'Welcome to sencha touch'
}]
});
}
});
</script>
</head>
</html>
Esto producirá el siguiente resultado:
Tema de BlackBerry
Considere su primera aplicación Hello World. Elimine el siguiente CSS de la aplicación.
https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/sencha-touch.css
Agregue el siguiente CSS para usar el tema de Windows.
https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/bb10.css
Para ver el efecto, pruebe el siguiente programa:
<!DOCTYPE html>
<html>
<head>
<link href = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/bb10.css" rel = "stylesheet" />
<script type = "text/javascript" src = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/sencha-touch-all.js"></script>
<script type = "text/javascript">
Ext.application({
name: 'Sencha',
launch: function() {
Ext.create("Ext.tab.Panel", {
fullscreen: true,
items: [{
title: 'Home',
iconCls: 'home',
html: 'Welcome to sencha touch'
}]
});
}
});
</script>
</head>
</html>
Esto producirá el siguiente resultado:
En el mundo de las tecnologías de hoy, tenemos múltiples dispositivos como móviles, tabletas, computadoras de escritorio y portátiles con diferentes tamaños de pantalla. Por lo tanto, existe la necesidad de desarrollar aplicaciones que sean accesibles desde todos los dispositivos con buena apariencia. Sin embargo, desarrollar un código diferente para diferentes dispositivos requiere mucho tiempo y es costoso.
Sencha Touch nos ayuda en este sentido al ofrecer una función de perfil de dispositivo. En función del perfil activo, se ejecutarán y aplicarán las diferentes dependencias.
Podemos declarar el perfil del dispositivo mientras escribimos un código de aplicación. Podemos tener varios dispositivos como:
Ext.application({
name: 'MyApp',
profiles: ['Phone', 'Tablet']
});
Una vez hecho esto, los perfiles se cargarán como:
- MyApp.profiles.Phone.js
- MyApp.profiles.Tablet.js
Escribir un perfil de teléfono simple
Ext.define('Mail.profile.Phone', {
extend: 'Ext.app.Profile',
config: {
name: 'Phone',
views: ['phoneView']
},
isActive: function() {
return Ext.os.is('Phone');
}
});
Escribir un perfil de tableta simple
Ext.define('Mail.profile.Tablet', {
extend: 'Ext.app.Profile',
config: {
name: 'Tablet',
views: ['tableView']
},
isActive: function() {
return Ext.os.is('Tablet');
}
});
Como podemos ver en el perfil, tenemos la función isActive que determina si el dispositivo en particular está activo. Si el dispositivo está activo, las dependencias correspondientes se cargarán y se crearán instancias.
Como se mencionó en el ejemplo anterior, si estamos usando un dispositivo telefónico, la función isActive del perfil telefónico se volverá verdadera y se cargarán las dependencias relacionadas con el dispositivo telefónico; aquí se cargará phoneView. Si el dispositivo es una tableta, la función isActive del perfil del teléfono devolverá falso y la función isActive del perfil de la tableta devolverá verdadero y la dependencia tabletView se cargará.
Proceso de lanzamiento
Un punto más a tener en cuenta aquí es cuando tenemos perfiles en la aplicación, entonces la carga y creación de instancias del código de la aplicación será en el siguiente orden:
- Los controladores se instancian primero y se cargará la función de inicio de cada controlador.
- Se llamará a la función de inicio del perfil.
- Se llamará a la función de inicio de la aplicación.
Tanto el perfil como las funciones de lanzamiento de la aplicación son opcionales, por lo que si no definimos ninguna de ellas, no se llamarán.
Eche un vistazo al siguiente código para comprobar dónde y cómo se pueden definir las diferentes funciones de lanzamiento e inicio.
Función de inicio del controlador
Ext.define('MyApp.controller.Main', {
extend: 'Ext.app.Controller',
init : function (){
Ext.Msg.alert('Controller's init method');
},
config: {
refs: {
tab: '#divId
}
}
});
Función de lanzamiento del perfil
Ext.define('Mail.profile.Tablet', {
extend: 'Ext.app.Profile',
config: {
name: 'Tablet', views: ['tableView']
},
isActive: function() {
return Ext.os.is('Tablet');
}
launch : function() {
Ext.Msg.alert('profile's launch function');
}
});
Función de lanzamiento de la aplicación
Ext.application({
name: 'Sencha', launch: function() {
Ext.Msg.alert(Application's launch function);
}
});
Hay ciertas formas definidas en Sencha Touch para declarar dependencias, una dentro de la aplicación y la otra dentro de las clases.
Echemos un vistazo a las diferentes formas de definir dependencias.
Dependencias de nivel de aplicación
Aquí, declaramos todas las dependencias cuando creamos la aplicación Ext.
Ext.application({
name: 'MyApp',
views: ['StudentsView'],
models: ['StudentsModel'],
controllers: ['StudentsController'],
stores: ['StudentsStore'],
profiles: ['Phone', 'Tablet']
});
Ahora, cuando se cargue la aplicación, todas las dependencias se cargarán al mismo tiempo. La ruta de los otros archivos será:
- MyApp.views.StudentsView
- MyApp.models.StudentsModel
- MyApp.stores.StudentsStore etc.
La forma de declaración anterior no solo carga el archivo, también decide qué perfil debe mantener como activo. Después de cargar el controlador, se asegura de crear una instancia. Una vez que se cargan las tiendas, las instancia y proporciona una identificación si aún no se ha proporcionado.
Dependencias específicas del perfil
Cuando estamos usando perfiles en una aplicación, puede haber posibilidades de que solo se requieran pocas funcionalidades para algún perfil específico.
Las dependencias específicas del perfil se declaran en los propios perfiles en lugar de la declaración de nivel de aplicación.
Ext.define('MyApp.profile.Tablet', {
extend: 'Ext.app.Profile', config: {
views: ['StudentView'], controllers: ['StudentController'], models: ['StudentModel']
}
});
Las dependencias se cargan independientemente de que el perfil esté activo o no. Sin embargo, según el perfil activo, se produce un procesamiento adicional, como la creación de instancias del controlador y las tiendas.
Dependencias anidadas
Cuando tenemos una aplicación más grande, tenemos varios controladores, modelos, vistas y tiendas.
Siempre es bueno mantener la modularidad en aplicaciones más grandes. Para eso, podemos definir subcarpetas y al declarar dependencias podemos usar el nombre de la subcarpeta para declarar.
Ext.application({
name: 'MyApp',
controllers: ['Controller', 'nested.NewController'],
views: ['class.Cview', 'SView']
});
En el caso anterior, se cargarán los siguientes archivos:
- MyApp.controllers.Controller
- MyApp.controllers.nested.NewController
- MyApp.Views.Sview
- MyApp.Views.class.Cview
Dependencias externas
Podemos especificar las dependencias fuera de la aplicación dando nombres completos de las clases como:
Ext.Loader.setPath({
'Class': 'Class'
});
Ext.application({
views: ['Class.view.LoginForm', 'Welcome'],
controllers: ['Class.controller.Sessions', 'Main'],
models: ['Class.model.User']
});
En el caso anterior, se cargarán los siguientes archivos:
- Class/view/LoginForm.js
- Class/controller/Sessions.js
- Class/model/User.js
- app/view/Welcome.js
- app/controller/Main.js
Le ayuda a identificar qué sistema operativo está utilizando, en qué navegador está trabajando y cuáles son las funciones disponibles para su entorno.
Sencha Touch proporciona diferentes funciones para obtener información específica del entorno. Todos los métodos mencionados a continuación se pueden registrar, si la condición es if (Ext.os.is.Windows) {} y se basa en la condición, las tareas se pueden realizar.
Todos los métodos siguientes devuelven un valor booleano.
Sistema operativo
Ext.os es una clase que te brinda diferentes métodos para saber en qué sistema operativo estamos trabajando.
No Señor | Método y descripción |
---|---|
1 | Ext.os.is.webOS Esta función devolverá verdadero si está utilizando el sistema operativo webos; de lo contrario, devolverá falso. |
2 | Ext.os.is.RIMTable Esta función devolverá verdadero si está utilizando el sistema operativo RIMTable; de lo contrario, devolverá falso. |
3 | Ext.os.is.Linux Esta función devolverá verdadero si está utilizando el sistema operativo Linux; de lo contrario, devolverá falso. |
4 | Ext.os.is.Windows Esta función devolverá verdadero si está utilizando el sistema operativo Windows; de lo contrario, devolverá falso. |
5 | Ext.os.is.MacOs Esta función devolverá verdadero si está utilizando el sistema operativo Mac; de lo contrario, devolverá falso. |
6 | Ext.os.is.BlackBerry Esta función devolverá verdadero si está utilizando el sistema operativo BlackBerry; de lo contrario, devolverá falso. |
7 | Ext.os.is.iOS Esta función devolverá verdadero si está utilizando el sistema operativo IOS; de lo contrario, devolverá falso. |
8 | Ext.os.is.Android Esta función devolverá verdadero si está utilizando el sistema operativo Android; de lo contrario, devolverá falso. |
Detección de dispositivos
No Señor | Método y descripción |
---|---|
1 | Ext.os.is.iPad Esta función devolverá verdadero si está usando iPad, de lo contrario, devolverá falso. |
2 | Ext.os.is.iPhone Esta función devolverá verdadero si está usando iPhone, de lo contrario, devolverá falso. |
3 | Ext.os.is.iPod Esta función devolverá verdadero si está utilizando iPod, de lo contrario, devolverá falso. |
Versión del sistema operativo
No Señor | Método y descripción |
---|---|
1 | Ext.os.name Devuelve el nombre del sistema operativo. |
2 | Ext.os.version.version Da la versión del sistema operativo que estamos usando. |
Detección del navegador
No Señor | Método y descripción |
---|---|
1 | Ext.browser.is.IE Esta función devuelve verdadero si usamos el navegador Internet Explorer; de lo contrario, devuelve falso. |
2 | Ext.browser.is.FF Esta función devuelve verdadero si estamos usando el navegador FireFox, de lo contrario, devuelve falso. |
3 | Ext.browser.is.Chrome Esta función devuelve verdadero si estamos usando el navegador Chrome; de lo contrario, devuelve falso. |
4 | Ext.browser.is.Opera Esta función devuelve verdadero si estamos usando el navegador Opera; de lo contrario, devuelve falso. |
5 | Ext.browser.is.Safari Esta función devuelve verdadero si estamos usando el navegador Safari; de lo contrario, devuelve falso. |
Esta función Ext.browser proporciona varias otras funciones:
No Señor | Método y descripción |
---|---|
1 | Ext.browser.userAgent Devuelve el userAgent actual. |
2 | Ext.browser.isSecure Devuelve verdadero si la página actual usa SSL. |
3 | Ext.browser.isStrict Devuelve verdadero si el navegador está en modo estricto. |
4 | Ext.browser.engineName Devuelve el nombre del motor del navegador (WebKit, Gecko, Presto, Trident y otros). |
5 | Ext.browser.engineVersion Devuelve la versión del motor del navegador. |
Caracteristicas
Ext.feature.has es verificar si el navegador tiene la siguiente característica o no.
No Señor | Método y descripción |
---|---|
1 | Ext.feature.has.Audio Este método devuelve verdadero si el navegador admite la función de etiqueta de audio de html5. |
2 | Ext.feature.has.Canvas Este método devuelve verdadero si el navegador admite la función de etiqueta de lienzo de html5. |
3 | Ext.feature.has.classList Este método devuelve verdadero si el navegador admite la función de lista de clases de html5 que se usa para agregar, eliminar y alternar clases css para el elemento html. |
4 | Ext.feature.has.Css3dTransforms Este método devuelve verdadero si el navegador admite la función de transformación 3D de CSS de css3. |
5 | Ext.feature.has.CssAnimations Este método devuelve verdadero si el navegador admite animaciones de css3. |
6 | Ext.feature.has.CssTransforms Este método devuelve verdadero si el navegador admite la función de transformación Css de css3. |
7 | Ext.feature.has.CssTransitions Este método devuelve verdadero si el navegador admite la función de transición de css3. |
8 | Ext.feature.has.DeviceMotion Este método devuelve verdadero si el navegador admite la función de movimiento del dispositivo. |
9 | Ext.feature.has.Geolocation Este método devuelve verdadero si el navegador admite la función de ubicación geográfica de html5. |
10 | Ext.feature.has.History Este método devuelve verdadero si el navegador admite la función de historial de html. |
11 | Ext.feature.has.Orientation Este método devuelve verdadero si el navegador puede detectar cuál es la orientación del dispositivo. |
12 | Ext.feature.has.OrientationChange Este método devuelve verdadero si el navegador puede detectar cambios en la Orientación del dispositivo. |
13 | Ext.feature.has.Range El rango es un tipo de etiqueta de entrada html para el elemento del control deslizante de rango, por lo que si el navegador admite el control deslizante, esta función devuelve verdadero. |
14 | Ext.feature.has.SqlDatabase La base de datos web sql es una API de página web para almacenar datos en una base de datos en la que podemos realizar operaciones de consulta. Este método devuelve verdadero si el navegador admite la base de datos Sql web. |
15 | Ext.feature.has.Svg Svg significa Scalable Vector Graphics, este método devuelve verdadero si el navegador admite la función svg de html 5. |
dieciséis | Ext.feature.has.Touch Este método devuelve verdadero si el navegador tiene la función táctil. |
17 | Ext.feature.has.Video Este método devuelve verdadero si el navegador admite etiquetas de video html 5. |
18 | Ext.feature.has.Vml Vml significa lenguaje de marcado vectorial, que es un lenguaje de marcado basado en xml. Por lo tanto, este método devuelve verdadero si el navegador admite vml. |
19 | Ext.feature.has.WebSockets El zócalo web es básicamente un protocolo de comunicación para computadoras que admite dos comunicaciones entre clientes y servidor. Este método devuelve verdadero si el navegador es compatible con WebSockets; de lo contrario, devuelve falso. |
Los eventos son algo que se activa cuando algo le sucede a la clase. Por ejemplo, cuando se hace clic en un botón o antes / después de que se renderice un elemento.
Métodos para escribir eventos
A continuación se muestran los métodos para escribir eventos.
- Eventos integrados que utilizan oyentes.
- Adjuntar eventos más tarde
- Eventos personalizados
Eventos integrados que utilizan oyentes
Sencha Touch proporciona propiedad de escucha para escribir eventos y eventos personalizados en archivos Sencha Touch.
Oyente de escritura en Sencha Touch
Agregaremos el oyente en el programa anterior agregando la propiedad listen al panel, que se muestra a continuación:
<!DOCTYPE html>
<html>
<head>
<link href = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/sencha-touch.css" rel = "stylesheet" />
<script type = "text/javascript" src = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/sencha-touch-all.js"></script>
<script type = "text/javascript">
Ext.application({
name: 'Sencha', launch: function() {
Ext.create('Ext.Panel', {
html: 'My Panel', fullscreen: true, listeners: {
painted: function() {
Ext.Msg.alert('I was painted to the screen');
}
}
});
}
});
</script>
</head>
</html>
Esto producirá el siguiente resultado:
De esta forma también podemos escribir varios eventos en la propiedad de los oyentes.
Varios eventos en el mismo oyente
<!DOCTYPE html>
<html>
<head>
<link href = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/sencha-touch.css" rel = "stylesheet" />
<script type = "text/javascript" src = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/sencha-touch-all.js"></script>
<script type = "text/javascript">
Ext.application({
name: 'Sencha',
launch: function() {
var myButton = Ext.Viewport.add({
xtype: 'button',
centered: true,
text: 'Click me'
});
myButton.on({
tap: function() {
var randomWidth = 100 + Math.round(Math.random() * 200);
this.setWidth(randomWidth);
},
widthchange: function(button, newWidth, oldWidth) {
alert('My width changed from ' + oldWidth + ' to ' + newWidth);
}
});
}
});
</script>
</head>
</html>
Producirá el siguiente resultado:
Adjuntando evento más tarde
En el método anterior de escribir eventos, hemos escrito eventos en oyentes en el momento de crear elementos.
La otra forma de adjuntar eventos es la siguiente:
<!DOCTYPE html>
<html>
<head>
<link href = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/sencha-touch.css" rel = "stylesheet" />
<script type = "text/javascript" src = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/sencha-touch-all.js"></script>
<script type = "text/javascript">
Ext.application({
name: 'Sencha',
launch: function() {
var myButton = Ext.Viewport.add({
xtype: 'button',
centered: true,
text: 'Click me'
});
myButton.on('tap', function() {
alert("Event listener attached by .on");
});
}
});
</script>
</head>
</html>
Producirá el siguiente resultado:
Eventos personalizados
Podemos escribir eventos personalizados en Sencha Touch y disparar los eventos con el método fireEvent. El siguiente ejemplo explica cómo escribir eventos personalizados.
<!DOCTYPE html>
<html>
<head>
<link href = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/sencha-touch.css" rel = "stylesheet" />
<script type = "text/javascript" src = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/sencha-touch-all.js"></script>
<script type = "text/javascript">
Ext.application({
name: 'Sencha',
launch: function() {
var myButton = Ext.Viewport.add({
xtype: 'button',
centered: true,
text: "Just wait 5 seconds",
listeners: {
myEvent: function(button, points) {
alert('myEvent was fired! You score ' + points + ' points');
}
}
});
Ext.defer(function() {
var number = Math.ceil(Math.random() * 100);
myButton.fireEvent('myEvent', myButton, number);
}, 5000);
}
});
</script>
</head>
</html>
Una vez que se carga la página y el documento está listo, aparecerá la página de IU con el botón y como estamos disparando un evento después de 5 segundos, una vez que el documento esté listo aparecerá el cuadro de alerta después de 5 segundos.
Aquí hemos escrito el evento personalizado 'myEvent' y estamos disparando eventos como button.fireEvent (eventName);
El diseño es la forma en que se organizan los elementos en un contenedor. Eso podría ser horizontal, vertical o cualquier otro. Sencha Touch tiene diferentes diseños definidos en su biblioteca, aunque también podemos escribir diseños personalizados.
No Señor. | Diseño y descripción |
---|---|
1 | hBox Esta disposición permite distribuir el elemento de forma horizontal. |
2 | vBox Esta disposición permite distribuir el elemento de forma vertical. Este es uno de los diseños más utilizados. |
3 | Ajuste En este diseño, el contenedor se llena con un solo panel y cuando no hay un requisito específico relacionado con el diseño, se utiliza este diseño. |
4 | Tarjeta (TabPanel) Este diseño organiza diferentes componentes en forma de pestaña. Las pestañas se mostrarán en la parte superior del contenedor. Cada vez, solo una pestaña es visible y cada pestaña se considera un componente diferente. |
Sencha Touch viene con soporte de historial completo e instalaciones de enlaces profundos.
Tiene la funcionalidad de botón de retroceso más simple, que ayuda al usuario a navegar entre las pantallas, sin siquiera actualizar la página o la aplicación.
También proporciona la funcionalidad de rutas, que ayuda al usuario a navegar a cualquier URL. Basado en la URL proporcionada en la ventana del navegador, llama a funciones específicas para realizar una tarea específica.
Mire el siguiente ejemplo para ver la funcionalidad del botón Atrás.
Este ejemplo muestra la lista anidada que no es más que una lista dentro de una lista, por lo que cuando hace clic en cualquiera de los elementos de la lista, se abre otra lista y aparece un botón de retroceso en la parte superior de la pantalla.
Para obtener una base de código completa, puede consultar Lista anidada en la sección de componentes de vista.
Enrutamiento
El ejemplo más simple de rutas
Ext.define('MyApp.controller.Main', {
extend: 'Ext.app.Controller',
config: {
routes: {
login: 'showLogin',
'user/:id': 'userId'
}
},
showLogin: function() {
Ext.Msg.alert('This is the login page');
},
userId: function(id) {
Ext.Msg.alert('This is the login page specific to the used Id provided');
}
});
En el ejemplo anterior, si la URL del navegador es https://myApp.com/#login, se llamará a la función showLogin.
Podemos proporcionar parámetros en la URL y, en función del parámetro específico, se puede llamar a la función. Por ejemplo, si la URL es https://myApp.com/#user/3, se llamará a la otra función userId y la identificación específica se puede utilizar dentro de las funciones.
Enrutamiento avanzado
En algún momento tenemos parámetros avanzados que incluyen comas, espacios en blanco y caracteres especiales, etc. para esto, si usamos la forma anterior de escribir rutas, no funcionará. Para resolver este problema, Sencha touch proporciona un enrutamiento condicional donde podemos especificar la condición de qué tipo de datos debe aceptar el parámetro.
Ext.define('MyApp.controller.Main', {
extend: 'Ext.app.Controller', config: {
routes: {
login/:id: {
action: showLogin, conditions: {':id: "[0-9a-zA-Z\.]+" }
}
},
showLogin: function() {
Ext.Msg.alert('This is the login page with specific id which matches criteria');
}
}
});
Entonces, como en el ejemplo anterior, hemos dado regex en la condición que establece claramente qué tipo de datos deben permitirse como parámetro de URL.
Compartir la misma URL en diferentes perfiles de dispositivo
Como Sencha touch proporciona un perfil de dispositivo para que se pueda usar el mismo código de aplicación en varios dispositivos, puede haber posibilidades de que diferentes perfiles tengan diferentes funciones para la misma URL.
Para resolver este problema Sencha touch nos da libertad para escribir enrutamiento en el controlador principal y la función llamada para ser escrita en todos los perfiles con sus perfiles específicos.
Ext.define('MyApp.controller.Main', {
extend: 'Ext.app.Controller', config: {
routes: {
login: 'showLogin'
}
},
});
// For phone profile
Ext.define('MyApp.controller.phone.Main, {
extend: 'MyApp.controller.Main, showLogin: function() {
Ext.Msg.alert('This is the login page for mobile phone profile');
}
});
// For tablet profile
Ext.define('MyApp.controller.tablet.Main, {
extend: 'MyApp.controller.Main,showLogin: function() {
Ext.Msg.alert('This is the login page for tablet profile');
}
});
Como muestra el ejemplo, tenemos un controlador principal que tiene la función showLogin y tenemos dos perfiles diferentes (teléfono / tableta). Tanto el perfil tiene función showLogin con código diferente específico para el perfil.
De esta manera podemos compartir la misma URL en múltiples dispositivos de perfil con sus funcionalidades específicas.
Sencha Touch proporciona la configuración XHR2 para trabajar con el desarrollo Ajax y Ajax2.
XHR2 es xmlHttpRequest nivel 2, que solía solicitar datos del servidor. Para cualquier aplicación web, los datos residen en el servidor y, una vez que se carga la página, se debe acceder a los datos desde el servidor con la ayuda de solicitudes Ajax.
XHR2 en Sencha Touch proporciona la función de barra de progreso, que muestra al usuario la cantidad de datos transferidos para una solicitud en particular. XHR2 se agregó recientemente, por lo que debemos verificar si el navegador lo admite o no.
A continuación se muestra la función para verificar si el navegador es compatible con XHR2:
if (Ext.feature.has.XHR2) {
// Here we can write functionality to work if browser supports XHR2
}
Incluso podemos comprobar si la subida progresiva con XHR2 es compatible con el navegador o no.
if (Ext.feature.has.XHRUploadProgress) {
// Here we can write functionality to work if browser supports progressive uploads
}
Se incluyen varias funciones nuevas de XHR2 en Sencha Touch.
No Señor | Características y descripción |
---|---|
1 | XHR2: true Esto se usa para habilitar y deshabilitar la funcionalidad XHR2 en la aplicación. |
2 | Ext.field.File Se agrega un nuevo campo de archivo para brindar más información sobre el tipo de campo. |
3 | Ext.field.FileInput Esto para proporcionar FileInput. |
4 | Ext.progressIndicator Esto es para proporcionar el porcentaje exacto de datos transferidos en términos de barra de progreso. |
5 | xtype: fileinput Para crear una instancia de la clase fileInput. |
6 | xtype: filefield Para crear una instancia de clase de archivo. |
7 | responseType : value Este parámetro permite varios tipos de respuestas como texto, documento, blob, etc. |
A continuación se muestran los ejemplos para enviar una solicitud ajax simple con y sin parámetro y cargar archivos usando ajax.
Solicitud de Ajax simple sin parámetros: éxito
<!DOCTYPE html>
<html>
<head>
<link href = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/sencha-touch.css" rel = "stylesheet" />
<script type = "text/javascript" src = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/sencha-touch-all.js"></script>
<script type = "text/javascript">
Ext.setup({
requires: [ 'Ext.Panel', 'Ext.Button', 'Ext.form.Panel'], onReady: function() {
var request = {
url: 'https://www.tutorialspoint.com/sencha_touch/index.htm',
method: 'POST',
xhr2: true,
success: function(response) {
Ext.Msg.alert('Ajax call successful');
},
failure: function(response) {
Ext.Msg.alert('Ajax call failed');
}
};
Ext.Viewport.add({
xtype:"panel",
layout:"vbox",
fullscreen:true,
items: [
{
xtype:"button",
text: "Ajax",
ui: 'confirm',
handler: function(){
Ext.Ajax.request(request);
}
}
]
});
}
});
</script>
</head>
<body>
</body>
</html>
Producirá el siguiente resultado:
El ejemplo anterior muestra la llamada ajax exitosa ya que la URL mencionada es correcta. En este ejemplo, no estamos pasando ningún parámetro, es solo una simple solicitud ajax que llega a la URL mencionada.
Si está utilizando el navegador Chrome en la herramienta para desarrolladores, navegue a la sección de red, puede ver la solicitud que se envía y la respuesta que obtenemos.
Solicitud simple de Ajax sin parámetros - Fallo
<!DOCTYPE html>
<html>
<head>
<link href = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/sencha-touch.css" rel = "stylesheet" />
<script type = "text/javascript" src = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/sencha-touch-all.js"></script>
<script type = "text/javascript">
Ext.setup({
requires: [
'Ext.Panel',
'Ext.Button',
'Ext.form.Panel'
],
onReady: function() {
var request = {
url: 'https://www.tutorialspoint.com/sencha_touch/indexx.htm',
method: 'POST',
xhr2: true,
success: function(response) {
Ext.Msg.alert('Ajax call successful');
},
failure: function(response) {
Ext.Msg.alert('Ajax call failed');
}
};
Ext.Viewport.add({
xtype:"panel",
layout:"vbox",
fullscreen:true,
items: [
{
xtype:"button",
text: "Ajax",
ui: 'confirm',
handler: function(){
Ext.Ajax.request(request);
}
}
]
});
}
});
</script>
</head>
<body>
</body>
</html>
Producirá el siguiente resultado:
En el ejemplo anterior, solo para mostrar cómo funciona la falla de ajax, hemos mencionado la URL incorrecta. Compare este y el ejemplo anterior, encontrará la diferencia.
Envío de parámetros en solicitud Ajax
<!DOCTYPE html>
<html>
<head>
<link href = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/sencha-touch.css" rel = "stylesheet" />
<script type = "text/javascript" src = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/sencha-touch-all.js"></script>
<script type = "text/javascript">
Ext.setup({
requires: [
'Ext.Panel',
'Ext.Button',
'Ext.form.Panel'
],
onReady: function() {
var formData = new FormData();
formData.append("firstName", "Hi");
formData.append("lastName", "Reader");
// Request will be sent as part of the payload instead of standard post data
var request = {
url: 'https://www.tutorialspoint.com/sencha_touch/sencha_json.php',
method: 'POST',
xhr2: true,
data: formData,
success: function(response) {
var out = Ext.getCmp("output");
response = Ext.JSON.decode(response.responseText, true);
Ext.Msg.alert(response.message);
},
failure: function(response) {
var out = Ext.getCmp("output");
Ext.Msg.alert('Ajax failed!');
}
};
Ext.Viewport.add({
xtype:"panel",
layout:"vbox",
fullscreen:true,
items: [
{
xtype:"button",
text: "Ajax",
ui: 'confirm',
handler: function(){
Ext.Ajax.request(request);
}
}
]
});
}
});
</script>
</head>
<body>
</body>
</html>
Producirá el siguiente resultado:
En este ejemplo, estamos pasando parámetros con el ajax usando la propiedad de datos de la llamada ajax.
Subiendo archivos usando Ajax
<!DOCTYPE html>
<html>
<head>
<link href = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/sencha-touch.css" rel = "stylesheet" />
<script type = "text/javascript" src = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/sencha-touch-all.js"></script>
<script type = "text/javascript">
Ext.setup({
requires: [
'Ext.Panel',
'Ext.MessageBox',
'Ext.Button',
'Ext.ProgressIndicator',
'Ext.form.Panel',
'Ext.field.FileInput'
],
onReady: function() {
var progressIndicator = Ext.create("Ext.ProgressIndicator", {
loadingText: "Uploading: {percent}%"
});
var request = {
url: 'https://www.tutorialspoint.com/sencha_touch/sencha_json.php',
method: 'POST',
xhr2: true,
progress:progressIndicator,
success: function(response) {
Ext.Msg.alert('File uploaded successfully.');
},
failure: function(response) {
Ext.Msg.alert('File upload failed.');
}
};
Ext.Viewport.add(progressIndicator);
Ext.Viewport.add({
xtype:"panel",
layout:"vbox",
fullscreen:true,
items: [
{
xtype:"fileinput",
accept:"image/jpeg"
},
{
xtype:"button",
text: "Upload",
ui: 'confirm',
handler: function(){
var input = Ext.Viewport.down("fileinput").input;
var files = input.dom.files;
if (files.length) {
request.binaryData = files[0];
Ext.Ajax.request(request);
}else {
Ext.Msg.alert("Please Select a JPG");
}
}
}
]
});
}
});
</script>
</head>
<body>
</body>
</html>
Producirá el siguiente resultado:
Este ejemplo muestra cómo cargar datos usando una llamada ajax. En este ejemplo, usamos el indicador de la barra de progreso para mostrar el progreso mientras se carga el archivo.
Sencha Touch proporciona varios componentes de interfaz de usuario, que se pueden personalizar según los requisitos.
Sr.N0. | Descripción de Componente |
---|---|
1 | Carrusel Este componente de la interfaz de usuario se utiliza para mostrar carrusel. |
2 | Lista Este componente de la interfaz de usuario se utiliza para mostrar listas. |
3 | Lista anidada Este componente de la interfaz de usuario se utiliza para mostrar una lista anidada. |
4 | Formar Este componente de la interfaz de usuario se utiliza para mostrar formularios. |
5 | Gráfico Este componente de la interfaz de usuario se utiliza para mostrar diferentes tipos de gráficos. |
6 | Componente flotante Este componente de la interfaz de usuario se utiliza para mostrar el componente flotante. |
7 | Panel de pestañas Este componente de la interfaz de usuario se utiliza para mostrar la vista del panel de pestañas. |
8 | Vista de navegación Este componente de la interfaz de usuario se utiliza para mostrar la vista de navegación. |
9 | Menú de acción Este componente de la interfaz de usuario se utiliza para mostrar la barra de menú de acciones. |
10 | Vista de datos Este componente de la interfaz de usuario se utiliza para mostrar la vista de datos. |
11 | Mapa Este componente de la interfaz de usuario se utiliza para mostrar el mapa de Google. |
Sencha Touch viene con características de empaque nativas.
A continuación se muestran los enlaces para los conceptos de empaquetado nativo de Sencha Touch.
No Señor. | Enlace de concepto y descripción |
---|---|
1 | Aprovisionamiento nativo de iOS |
2 | API nativas |
Práctica recomendada básica de JavaScript
Es una buena práctica mantener todo el código relacionado con JavaScript en un js (external JS) archivo, en lugar de escribirlo en el <script> etiqueta debajo de la sección de encabezado o JavaScript en línea en el cuerpo del documento.
Realice siempre una comprobación nula antes de que el elemento se utilice en lógica adicional.
Siga siempre la convención de nomenclatura, ya que hace que el código sea fácil de entender por cualquier otro programador.
Para que el código sea fácilmente comprensible, siempre se prefiere escribir comentarios para los métodos JS con una lógica clara detrás de lo que hace una función.
Mejores prácticas específicas de Sencha Touch
Utilice la estructura de carpetas recomendada por Sencha Touch, que será útil durante la compresión o minificación de JS.
Se recomienda encarecidamente utilizar el oyente (onclick / onblur, etc.) en el controlador en lugar de escribirlo en la propia página html.
No cree la instancia de la tienda cuando se llame a la tienda desde la vista.
Cuando creamos una instancia de una tienda, siempre debemos destruirla, ya que afecta el rendimiento.
Mientras usa Sencha Touch, no especifique ningún otro archivo JavaScript simple. Utilice todas las funciones de las clases Ext (mencionadas en controlador o utilidades).
Cuando el mapeo del modelo y el nombre son iguales, no especifique el mapeo. Solo el nombre resolverá el propósito.
No utilice propiedades innecesarias a la vista. Utilice solo la propiedad requerida y su valor que sea diferente del valor predeterminado.