jQuery Mobile - Criando uma aplicação no WebMatrix
Na primeira parte deste artigo eu apresentei os recursos básicos do jQuery Mobile. Agora vamos mostrar algo mais prático acessando dados e exibindo informações relacionadas.
O jQuery Mobile é um framework de interface de usuário unificada construída com base no jQuery que apresenta um código leve e com realce progressivo possuindo um design flexível e facilmente personalizável.
A biblioteca jQuery Mobile funciona em cima do core da biblioteca jQuery e em essência é uma biblioteca para interface de usuário alternativa ao jQuery que ainda esta na versão Alpha e que se propõe a criar sites para navegação com toque com aparência estilo IPhone/Ipad para diversas plataformas móveis como Apple iOS, Android, Nokia N900, etc.
O jQuery Mobile utiliza recursos de CSS3 e HTML 5 e desse modo para poder usar os recursos do jQuery Mobile você deverá usar um navegador com suporte a HTML 5. A equipe do jQuery planeja dar suporte aos navegadores Firefox, Safari, Google Chrome ou Opera. Atualmente você pode usar o Internet Explorer a partir da versão 8 para testar as aplicações feitas com o jQuery Mobile.
A biblioteca jQuery Mobile é composta por um arquivo JavaScript e um arquivo de estilo CSS com algumas imagens e você pode baixar estes arquivos neste link: http://jquerymobile.com/download/
Você pode baixar os arquivos javascript e css e hospedá-los em sua aplicação ou utilizar a referência aos arquivos hospedados na CDN conforme o código abaixo:
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0b2/jquery.mobile-1.0b2.min.css" /> <script src="http://code.jquery.com/jquery-1.6.2.min.js"></script> <script src="http://code.jquery.com/mobile/1.0b2/jquery.mobile-1.0b2.min.js"></script> |
Obs: os arquivos indicados representam a última versão disponível mas lembre-se que eles estão sendo atualizados com frequência. Para ter uma posição sempre atualizada você pode usar as seguintes referências:
<link href="http://code.jquery.com/mobile/latest/jquery.mobile.min.css" rel="stylesheet" type="text/css" /> <script src="http://code.jquery.com/jquery-1.6.2.min.js"></script> <script src="http://code.jquery.com/mobile/latest/jquery.mobile.min.js"></script> |
Criando uma aplicação com o Web Matrix
Abra o WebMatrix e clique no ícone Site From Template para que possamos criar um site a partir de um modelo já existente;
A seguir selecione o template Empty Site e informe o nome jQueryMobile_WebMatrizDemo e clique em OK
Após isso teremos um site web com a estrutura exibida na figura abaixo; ou seja se clicarmos na opção Files veremos apenas um arquivo robots.txt;
Vamos então criar algumas pastas em nosso web site para colocarmos os arquivos do jQuery Mobile:
Clicando no item New-> New Folder vamos incluir as
seguintes pastas no web site: App_Data Na figura ao lado vemos a estrutura das pastas no web site. |
Vamos incluir os arquivos do jQuery e do jQuery Mobile nas pastas Scripts, Styles e Images. Para isso clique com o botão direito do mouse sobre a pasta e selecione a opção : Add Existing File e procure pelos arquivos onde você baixou e descompactou. Defina a estrutura conforme a figura a seguir:
Na pasta App_Data vamos incluir um banco de dados Northwind40.sdf que é a versão 4.0 deste banco de dados para o SQL Server Compact Edition(CE).
Na figura abaixo vemos o banco de dados e suas tabelas. Vamos trabalhar com as tabelas Categories e Products.
A seguir vamos incluir uma nova pasta com o nome Shared e clicando com o botão direito do mouse sobre ela selecione New File;
Em seguida selecione o tipo CSHTML e informe o nome _Layout e clique em OK;
Agora defina o código abaixo no arquivo _Layout.cshtml da pasta Shared:
Neste arquivo definimos as referências para as bibliotecas do jQuery e do jQuery Mobile.
É importante frisar que do doctype <!DOCTYPE html> da suporte ao HTML 5 e é usado por padrão pelo Razor.
Vamos agora incluir um novo arquivo CSHTML com o nome Default.cshtml na raiz do web site e definir neste arquivo o seguinte código:
@{ Layout = "~/Shared/_Layout.cshtml";Page.Title = "Home";Page.Header = "Categorias";var db = Database.Open("Northwind40"); var sql = @"SELECT [Category ID] AS ID, [Category Name] As Name FROM Categories ORDER BY [Category Name]" ;var data = db.Query(sql); } <div data-role="content"> <ul data-role="listview" data-inset="true" data-theme="d">@foreach(var item in data){ <li><a href="/Category/@item.ID">@item.Name</a></li> } </ul> </div> |
Neste código estamos usando a sintaxe Razor para abrir o banco de dados e acessar a tabela Categories selecionando o código (ID) e nome da categoria;
- A seguir estamos usando as divs
contendo o data-role: "content" onde iremos exibir as
informações obtidas da tabela
-
Usando o atributo
data-role="listview" definimos uma lista
- o atributo data-insert="true" para a lista faz com que a mesma tenha
bordas e margens;
- a div data-theme="d" define um tema a ser usado
- O laço fore/each percorre os dados e exibe as categorias com um link
para Category mais o ID da categoria e o seu nome exibido na página;
Vamos executar esta página selecionando e clicando no menu Run e escolhendo um Navegador para exibição. Eu estou usando o Chrome.
O resultado é visto na figura a seguir, a exibição dos nomes das categorias da tabela Categories:
Observe na parte inferior esquerda da página o link para a categoria selecionada: Category/2 |
Nosso próximo objetivo será exibir os produtos de uma determinada categoria de forma que quando o usuário clicar em um nome de categoria seja aberta uma página contendo os produtos desta categoria.
Para isso vamos incluir novo arquivo CSHTML com o nome Category.cshtml na raiz do web site e definir neste arquivo o seguinte código:
@{ Layout = "~/Shared/_Layout.cshtml"; Page.Title = "Produtos"; Page.Header = "Produtos"; if(UrlData[0].IsEmpty()){ Response.Redirect("~/"); } var db = Database.Open("Northwind40"); var sql = @"SELECT [Product ID] AS ID, [Product Name] As Name FROM Products WHERE [Category ID] = @0 ORDER BY [Product Name]"; var category = UrlData[0]; var data = db.Query(sql, category); var primeiraletra = ""; } <div data-role="content"> <ul data-role="listview" data-inset="true" data-theme="d" data-dividertheme="b"> @foreach(var item in data){ if(item.Name.Substring(0,1) != primeiraletra){ <li data-role="list-divider">@item.Name.Substring(0,1).ToUpper()</li> primeiraletra= item.Name.Substring(0,1); } <li><a href="/Product/@item.ID">@item.Name</a></li> } </ul> </div |
Este código acessa a tabela Products e filtra os produtos pelo código da categoria selecionada;
- Novamente estamos usando os atributos data-role="content" para
definir onde iremos exibir as informações;
- Estamos extraindo a primeira letra de cada grupo de produtos e usando o
atributo data-role="list-divider" para dividir a lista e assim exibir os
produtos por ordem alfabética e agrupados pela primeira letra;
Executando novamente a página Default.cshtml e clicando em um categoria iremos obter a exibição dos produtos na página Category.cshtml:
|
Vamos agora exibir os detalhes de um produto, para isso inclua uma nova página chamada product.cshtml na raiz do web site e inclua nela o seguinte código:
@{ Layout = "~/Shared/_Layout.cshtml"; Page.Title = "Produtos"; Page.Header = "Detalhes do Produto"; if(UrlData[0].IsEmpty()){ Response.Redirect("~/"); } var product = UrlData[0]; var db = Database.Open("Northwind40"); var sql = @"SELECT Products.[Product Name] AS Name, Categories.[Category Name] AS Category, Suppliers.[Company Name] AS Supplier, Products.[Quantity Per Unit] AS Quantity, Products.[Unit Price] AS Price, Products.[Units In Stock] AS InStock, Products.[Units On Order] AS OnOrder FROM Products INNER JOIN Categories ON Products.[Category ID] = Categories.[Category ID] INNER JOIN Suppliers ON Products.[Supplier ID] = Suppliers.[Supplier ID] WHERE Products.[Product ID] = @0"; var item = db.QuerySingle(sql, product); } < div data-role="content" data-theme="d"><ul data-role="listview" data-inset="true" data-theme="e" data-dividertheme="b"> <li data-role="list-divider">@item.Name</li> <li>Fornecedor: @item.Supplier</li> <li>Categoria: @item.Category</li> <li>Quantidade por unidade: @item.Quantity</li> <li>Unidades em estoque : @item.InStock</li> <li>Unidades no pedido : @item.OnOrder</li> </ul> </ div> |
Neste código extraímos alguns dados do produto selecionado filtrando pelo ID do produto.
Executando o projeto teremos a sequência de execução das página até a exibição dos detalhes de um produto selecionado:
Neste exemplo eu não utilizei os efeitos de transição durante a navegação para uma nova página. Para fazer isso basta adicionar o atributo data-transition ao link.
Os valores possíveis são:
Como vimos usar os recursos do jQuery Mobile para exibir dados de um banco de dados e criar aplicações para dispositivos móveis é muito simples.
Poderíamos usar um emulador para testarmos a nossa aplicação. Uma opção gratuita seria o iBBDemo2 que é uma aplicação Adobe Air.
Pegue os exemplos usados aqui: jQueryMobile_WebMatrixDemo.zip
"Porque eu não tenho falado de mim mesmo; mas o Pai, que me enviou, Ele me deu mandamento sobre o que hei de fazer e sobre o que hei de falar. E sei que o seu mandamento é a vida eterna. Portanto, o que eu falo, falo-o como o Pai mo tem dito." João 12:49-50
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
http://i18n.2kminterativa.com.br/jquery/jquery-getting-started-pt_br.html