SlideShare une entreprise Scribd logo
1  sur  37
Intro to Sencha Touch
Lichtsoft – October 29th 2011
HTML 5 in Mobile Web
Why?

Rich & more interactive experience for mobile
 devices
Known Mobile Web (HTML 5)
Frameworks
Frameworks
Frameworks
Frameworks
Starting
1. Download Sencha Touch SDK
  http://www.sencha.com/products/touch/download

2. Start Web Server
3. Web Browser
  ▫ Safari
  ▫ Chrome
Starting
4. Unzip SDK
Starting
5. Test on Device
Starting
Starting
• open the httpd-xampp.conf file, probably in
  C:xamppapacheconfextra find:
<LocationMatch
"^/(?i:(?:xampp|security|licenses|phpmyadmin|webalizer|server-
status|server-info))">
  Order deny,allow
  Deny from all
  Allow from 127.0.0.0/8
  ErrorDocument 403 /error/HTTP_XAMPP_FORBIDDEN.html.var
</LocationMatch>


• change to Allow from all
Create Your First Application
Creating Application
• Folder Structure
Creating Application
• Index.html
<!DOCTYPE html>
<html>
  <head>
     <title>Hello World</title>
     <script src="lib/touch/sencha-touch.js"
       type="text/javascript"></script>
     <script src="app/app.js" type="text/javascript">
     </script>
     <link href="lib/touch/resources/css/sencha-touch.css"
       rel="stylesheet" type="text/css" />
  </head>
  <body></body>
</html>
Creating Application
   • app.js

new Ext.Application({
   launch: function() {
      new Ext.Panel({
         fullscreen: true,
         dockedItems: [{xtype:'toolbar', title:'My First App'}],
         layout: 'fit',
         styleHtmlContent: true,
         html: '<h2>Hello World!</h2>I did it!'
      });
   }
});
Creating Application
Creating Application
List Component
Data Store
Ext.regModel('Contact', {
       fields: ['firstName', 'lastName']
});

ListDemo.ListStore = new Ext.data.Store({
  model: 'Contact',
  sorters: 'firstName',
  getGroupString: function(record) {
    return record.get('firstName')[0];
  },
  data: [
       {     firstName: "Azby", lastName: "Luthfan" },
       {     firstName: "Yosef", lastName: "Sukianto"},
       {     firstName: "Brian", lastName: "Al Bahr" },
       {     firstName: "Chandra", lastName: "Sutikno"} ,
  ],
});
Using the Data Store
ListDemo = new Ext.Application({
  name: "ListDemo",

 launch: function(){
   ListDemo.listPanel = new Ext.List({
     id: 'indexList',
     store: ListDemo.ListStore,
     itemTpl:
      '<div class="contact">{firstName}&nbsp;{lastName}</div>',
   });

      ListDemo.Viewport = new Ext.Panel({
         fullscreen: true,
         layout: 'fit',
         items: [ListDemo.listPanel],
      });
  }
});
List with Data Store
Grouping List
ListDemo.listPanel = new Ext.List({
  id: 'indexList',
  store: ListDemo.ListStore,
  itemTpl:
    '<div class="contact">{firstName}&nbsp;{lastName}</div>',
  grouped: true,
  indexBar: true,
});
Grouping List
Adding Detail Page
ListDemo.detailPanel = new Ext.Panel({
       id: 'detailPanel',
       tpl: 'Hello, {firstName}',
});

ListDemo.Viewport = new Ext.Panel({
       fullscreen: true,
       layout: 'card',
       items: [ListDemo.listPanel, ListDemo.detailPanel],
});
Adding Detail Page
ListDemo.listPanel = new Ext.List({
  id: 'indexList',
  store: ListDemo.ListStore,
  itemTpl:
     '<div class="contact">{firstName}&nbsp;{lastName}</div>',
  grouped: true,
  indexBar: true,

  onItemDisclosure: function(record){
     ListDemo.detailPanel.update(record.data);
     ListDemo.Viewport.setActiveItem('detailPanel');
  },
});
List with Detail Page
List with Detail Page
when detail button touched
Adding Toolbar
 ListDemo.detailToolbar = new Ext.Toolbar({
   items: [
   {
      text: 'back',
      ui: 'back',
      handler: function() {
        ListDemo.Viewport.setActiveItem('indexList');
   }]
 });


 ListDemo.detailPanel = new Ext.Panel({
   id: 'detailPanel',
   tpl: 'Hello, {firstName}',
   dockedItems: [ListDemo.detailToolbar],
 });
Toolbar
Mobile Web vs Mobile App
Mobile Web vs Mobile App
Pros:
• No need to develop in multiple platform
Mobile Web vs Mobile App
Cons:
• Mobile web can’t use device features like
  Accelerometer, Camera, Compass, etc
• Animations in mobile web are sometimes
  inconsistent
• Slower
Titanium Mobile
PhoneGap
PhoneGap
• Multi-platform
Thank You

Contenu connexe

Tendances

Tendances (20)

Service intergration
Service intergration Service intergration
Service intergration
 
Saving Data
Saving DataSaving Data
Saving Data
 
The Ring programming language version 1.6 book - Part 31 of 189
The Ring programming language version 1.6 book - Part 31 of 189The Ring programming language version 1.6 book - Part 31 of 189
The Ring programming language version 1.6 book - Part 31 of 189
 
The Ring programming language version 1.8 book - Part 34 of 202
The Ring programming language version 1.8 book - Part 34 of 202The Ring programming language version 1.8 book - Part 34 of 202
The Ring programming language version 1.8 book - Part 34 of 202
 
Lecture8 php page control by okello erick
Lecture8 php page control by okello erickLecture8 php page control by okello erick
Lecture8 php page control by okello erick
 
Do something in 5 with gas 3-simple invoicing app
Do something in 5 with gas 3-simple invoicing appDo something in 5 with gas 3-simple invoicing app
Do something in 5 with gas 3-simple invoicing app
 
Php Mysql
Php Mysql Php Mysql
Php Mysql
 
RSS Application Using Dom
RSS Application Using Dom  RSS Application Using Dom
RSS Application Using Dom
 
Persistencia de datos con Parse
Persistencia de datos con ParsePersistencia de datos con Parse
Persistencia de datos con Parse
 
Transformation jsontoxmlesb
Transformation jsontoxmlesbTransformation jsontoxmlesb
Transformation jsontoxmlesb
 
Php database connectivity
Php database connectivityPhp database connectivity
Php database connectivity
 
Transformation jsontoxmlesb
Transformation jsontoxmlesbTransformation jsontoxmlesb
Transformation jsontoxmlesb
 
Transformation jsontoxmlesb
Transformation jsontoxmlesbTransformation jsontoxmlesb
Transformation jsontoxmlesb
 
MooseX::Datamodel - Barcelona Perl Workshop Lightning talk
MooseX::Datamodel - Barcelona Perl Workshop Lightning talkMooseX::Datamodel - Barcelona Perl Workshop Lightning talk
MooseX::Datamodel - Barcelona Perl Workshop Lightning talk
 
PHP
PHP PHP
PHP
 
Exmaples of file handling
Exmaples of file handlingExmaples of file handling
Exmaples of file handling
 
Excelsheet
ExcelsheetExcelsheet
Excelsheet
 
Unfiltered Unveiled
Unfiltered UnveiledUnfiltered Unveiled
Unfiltered Unveiled
 
Introduction to the new official C# Driver developed by 10gen
Introduction to the new official C# Driver developed by 10genIntroduction to the new official C# Driver developed by 10gen
Introduction to the new official C# Driver developed by 10gen
 
XML and Web Services
XML and Web ServicesXML and Web Services
XML and Web Services
 

En vedette (6)

4 kunci sukses bertransaksi emas revisi hitam putih
4 kunci sukses bertransaksi emas revisi hitam putih4 kunci sukses bertransaksi emas revisi hitam putih
4 kunci sukses bertransaksi emas revisi hitam putih
 
Daya Beli Masyrakat Terhadap Produk Mie Sedaap di Lamongan
Daya Beli Masyrakat Terhadap Produk Mie Sedaap di LamonganDaya Beli Masyrakat Terhadap Produk Mie Sedaap di Lamongan
Daya Beli Masyrakat Terhadap Produk Mie Sedaap di Lamongan
 
אם אג׳ייל כזה כיף אז למה התור במשרד למשאבי אנוש?
אם אג׳ייל כזה כיף אז למה התור במשרד למשאבי אנוש?אם אג׳ייל כזה כיף אז למה התור במשרד למשאבי אנוש?
אם אג׳ייל כזה כיף אז למה התור במשרד למשאבי אנוש?
 
Presentasi om gede
Presentasi om gedePresentasi om gede
Presentasi om gede
 
Agile and the evolution
Agile and the evolutionAgile and the evolution
Agile and the evolution
 
Agile at Scale
Agile at ScaleAgile at Scale
Agile at Scale
 

Similaire à Intro to sencha touch

Building a Mobile App with Sencha Touch
Building a Mobile App with Sencha TouchBuilding a Mobile App with Sencha Touch
Building a Mobile App with Sencha Touch
James Pearce
 
Create a mobile web app with Sencha Touch
Create a mobile web app with Sencha TouchCreate a mobile web app with Sencha Touch
Create a mobile web app with Sencha Touch
James Pearce
 
Cis407 a ilab 4 web application development devry university
Cis407 a ilab 4 web application development devry universityCis407 a ilab 4 web application development devry university
Cis407 a ilab 4 web application development devry university
lhkslkdh89009
 
OpenERP e l'arte della gestione aziendale con Python
OpenERP e l'arte della gestione aziendale con PythonOpenERP e l'arte della gestione aziendale con Python
OpenERP e l'arte della gestione aziendale con Python
PyCon Italia
 

Similaire à Intro to sencha touch (20)

Building a Mobile App with Sencha Touch
Building a Mobile App with Sencha TouchBuilding a Mobile App with Sencha Touch
Building a Mobile App with Sencha Touch
 
A mobile web app for Android in 75 minutes
A mobile web app for Android in 75 minutesA mobile web app for Android in 75 minutes
A mobile web app for Android in 75 minutes
 
Local SQLite Database with Node for beginners
Local SQLite Database with Node for beginnersLocal SQLite Database with Node for beginners
Local SQLite Database with Node for beginners
 
Create a mobile web app with Sencha Touch
Create a mobile web app with Sencha TouchCreate a mobile web app with Sencha Touch
Create a mobile web app with Sencha Touch
 
Ajax - a quick introduction
Ajax - a quick introductionAjax - a quick introduction
Ajax - a quick introduction
 
The Full Power of ASP.NET Web API
The Full Power of ASP.NET Web APIThe Full Power of ASP.NET Web API
The Full Power of ASP.NET Web API
 
Grails 1.2 探検隊 -新たな聖杯をもとめて・・・-
Grails 1.2 探検隊 -新たな聖杯をもとめて・・・-Grails 1.2 探検隊 -新たな聖杯をもとめて・・・-
Grails 1.2 探検隊 -新たな聖杯をもとめて・・・-
 
Cis407 a ilab 4 web application development devry university
Cis407 a ilab 4 web application development devry universityCis407 a ilab 4 web application development devry university
Cis407 a ilab 4 web application development devry university
 
beyond tellerrand: Mobile Apps with JavaScript – There's More Than Web
beyond tellerrand: Mobile Apps with JavaScript – There's More Than Webbeyond tellerrand: Mobile Apps with JavaScript – There's More Than Web
beyond tellerrand: Mobile Apps with JavaScript – There's More Than Web
 
Vaadin7
Vaadin7Vaadin7
Vaadin7
 
RIA - Entwicklung mit Ext JS
RIA - Entwicklung mit Ext JSRIA - Entwicklung mit Ext JS
RIA - Entwicklung mit Ext JS
 
OpenERP e l'arte della gestione aziendale con Python
OpenERP e l'arte della gestione aziendale con PythonOpenERP e l'arte della gestione aziendale con Python
OpenERP e l'arte della gestione aziendale con Python
 
How te bring common UI patterns to ADF
How te bring common UI patterns to ADFHow te bring common UI patterns to ADF
How te bring common UI patterns to ADF
 
14922 java script built (1)
14922 java script built (1)14922 java script built (1)
14922 java script built (1)
 
How to Bring Common UI Patterns to ADF
How to Bring Common UI Patterns to ADF How to Bring Common UI Patterns to ADF
How to Bring Common UI Patterns to ADF
 
Developing application for Windows Phone 7 in TDD
Developing application for Windows Phone 7 in TDDDeveloping application for Windows Phone 7 in TDD
Developing application for Windows Phone 7 in TDD
 
Paris js extensions
Paris js extensionsParis js extensions
Paris js extensions
 
Micro app-framework - NodeLive Boston
Micro app-framework - NodeLive BostonMicro app-framework - NodeLive Boston
Micro app-framework - NodeLive Boston
 
Micro app-framework
Micro app-frameworkMicro app-framework
Micro app-framework
 
Sencha Touch - Introduction
Sencha Touch - IntroductionSencha Touch - Introduction
Sencha Touch - Introduction
 

Dernier

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Dernier (20)

ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 

Intro to sencha touch

  • 1. Intro to Sencha Touch Lichtsoft – October 29th 2011
  • 2. HTML 5 in Mobile Web Why? Rich & more interactive experience for mobile devices
  • 3. Known Mobile Web (HTML 5) Frameworks
  • 7.
  • 8. Starting 1. Download Sencha Touch SDK http://www.sencha.com/products/touch/download 2. Start Web Server 3. Web Browser ▫ Safari ▫ Chrome
  • 12. Starting • open the httpd-xampp.conf file, probably in C:xamppapacheconfextra find: <LocationMatch "^/(?i:(?:xampp|security|licenses|phpmyadmin|webalizer|server- status|server-info))"> Order deny,allow Deny from all Allow from 127.0.0.0/8 ErrorDocument 403 /error/HTTP_XAMPP_FORBIDDEN.html.var </LocationMatch> • change to Allow from all
  • 13. Create Your First Application
  • 15. Creating Application • Index.html <!DOCTYPE html> <html> <head> <title>Hello World</title> <script src="lib/touch/sencha-touch.js" type="text/javascript"></script> <script src="app/app.js" type="text/javascript"> </script> <link href="lib/touch/resources/css/sencha-touch.css" rel="stylesheet" type="text/css" /> </head> <body></body> </html>
  • 16. Creating Application • app.js new Ext.Application({ launch: function() { new Ext.Panel({ fullscreen: true, dockedItems: [{xtype:'toolbar', title:'My First App'}], layout: 'fit', styleHtmlContent: true, html: '<h2>Hello World!</h2>I did it!' }); } });
  • 20. Data Store Ext.regModel('Contact', { fields: ['firstName', 'lastName'] }); ListDemo.ListStore = new Ext.data.Store({ model: 'Contact', sorters: 'firstName', getGroupString: function(record) { return record.get('firstName')[0]; }, data: [ { firstName: "Azby", lastName: "Luthfan" }, { firstName: "Yosef", lastName: "Sukianto"}, { firstName: "Brian", lastName: "Al Bahr" }, { firstName: "Chandra", lastName: "Sutikno"} , ], });
  • 21. Using the Data Store ListDemo = new Ext.Application({ name: "ListDemo", launch: function(){ ListDemo.listPanel = new Ext.List({ id: 'indexList', store: ListDemo.ListStore, itemTpl: '<div class="contact">{firstName}&nbsp;{lastName}</div>', }); ListDemo.Viewport = new Ext.Panel({ fullscreen: true, layout: 'fit', items: [ListDemo.listPanel], }); } });
  • 22. List with Data Store
  • 23. Grouping List ListDemo.listPanel = new Ext.List({ id: 'indexList', store: ListDemo.ListStore, itemTpl: '<div class="contact">{firstName}&nbsp;{lastName}</div>', grouped: true, indexBar: true, });
  • 25. Adding Detail Page ListDemo.detailPanel = new Ext.Panel({ id: 'detailPanel', tpl: 'Hello, {firstName}', }); ListDemo.Viewport = new Ext.Panel({ fullscreen: true, layout: 'card', items: [ListDemo.listPanel, ListDemo.detailPanel], });
  • 26. Adding Detail Page ListDemo.listPanel = new Ext.List({ id: 'indexList', store: ListDemo.ListStore, itemTpl: '<div class="contact">{firstName}&nbsp;{lastName}</div>', grouped: true, indexBar: true, onItemDisclosure: function(record){ ListDemo.detailPanel.update(record.data); ListDemo.Viewport.setActiveItem('detailPanel'); }, });
  • 28. List with Detail Page when detail button touched
  • 29. Adding Toolbar ListDemo.detailToolbar = new Ext.Toolbar({ items: [ { text: 'back', ui: 'back', handler: function() { ListDemo.Viewport.setActiveItem('indexList'); }] }); ListDemo.detailPanel = new Ext.Panel({ id: 'detailPanel', tpl: 'Hello, {firstName}', dockedItems: [ListDemo.detailToolbar], });
  • 31. Mobile Web vs Mobile App
  • 32. Mobile Web vs Mobile App Pros: • No need to develop in multiple platform
  • 33. Mobile Web vs Mobile App Cons: • Mobile web can’t use device features like Accelerometer, Camera, Compass, etc • Animations in mobile web are sometimes inconsistent • Slower

Notes de l'éditeur

  1. jQTouch is easy to use and relatively well-documented. It’s featured in the excellent Building iPhone Apps with HTML, CSS, and JavaScript. jQTouch takes a progressive-enhancement approach, building an iPhone-like experience on top of your appropriately-constructed HTML. It’s simple, providing a basic set of widgets and animations and just enough programmatic control to permit more dynamic behavior.But even in my simple test app there were performance issues. Page transitions can be jumpy or missing, and there are periodic delays in responding to tap events. And while the project is technically active, the original author has moved on and development seems to have slowed.jQTouch is available under the permissive MIT License, one of my favorite open source licenses.
  2. jQuery Mobile is the new kid on the block. Announced in August 2010, it’s quickly progressed to a very functional Alpha 2. It takes a similar – but more standards-compliant – approach to jQTouch and feels very much like that framework’s successor, with a broader array of UI controls and styles.jQuery Mobile’s performance is variable (though better than that of jQTouch), particularly in responding to tap events rendering animations. It also lacks a small number of key programmatic hooks that would permit easy creation of more dynamic apps. For instance, there’s an event that triggers when a page is about to load (i.e. slide into view) but no way to tell the associated handler code what UI element resulted in the page switch, or to pass additional information to that handler. I was able to create workarounds but hope that future versions will take a cue from jQTouch and build out this functionality a little more.jQuery Mobile’s documentation is a little scattered but improving; I’m hopeful that it will become as robust as that of the core jQuery library. (Note that jQuery Mobile is really a mobile counterpart for jQuery UI, not for jQuery itself, on which it builds.)jQuery Mobile is available under either the MIT or the GPL2 license.
  3. Sencha Touch is the mobile counterpart to the Ext JS framework. Its approach differs significantly from jQTouch and jQuery Mobile: instead of enhancing preexisting HTML, it generates its own DOM based on objects created in JavaScript. As such, working with Sencha feels a little less “webby” and a little more like building apps in other technologies like Java or Flex. (It’s also a bit more like YUI than like jQuery.) I personally prefer the progressive enhancement approach, but it really is a matter of preference.Sencha is far more extensive than its competitors, with a vast array of UI components, explicit iPad support, storage and data binding facilities using JSON and HTML5 offline storage, and more. (It’s very cool to manipulate app data in one of Sencha’s data structures and watch the corresponding list update in real time.) It’s also the only Web framework I’ve seen with built-in support for objects that stay put (like a toolbar) while others scroll (like a list).For all that apparent extra weight, Sencha performed noticeably better and more reliably than either jQTouch or jQuery Mobile in my tests, with the exception of initial load time.When working with a library or framework, it’s usually counterproductive to “fight the framework” and do things your own way. Given how extensive Sencha Touch is, that means your app will probably end up doing just about everything the Sencha way. I’d originally used WebKit’s built-in SQLite database for offline storage but ultimately eliminated both complexity and bugs by moving that functionality into Sencha’s data stores.The documentation, while extensive, has odd holes. Between those and the sheer size of the framework, I spent a lot of time fighting bugs that were difficult to trace and to understand. Responses to my questions in the developer forums were more frequent and helpful than with the other frameworks, but still ultimately insufficient. Sencha provides paid support starting at $300/year; I strongly considered purchasing it but oddly, their response to my sales support inquiries was incredibly underwhelming given my interest in sending them money.Sencha Touch is available under the GPL3; under a somewhat confusing set of exceptions to the GPL that seem similar to the LGPL; or under a free commercial license.
  4. Much like Sencha Touch, Appcelerator’sTitanium Mobile allows you to write apps using a JavaScript API. But unlike Sencha, it compiles most of your code into a native iPhone or Android app. That means it isn’t really a Web framework, but a compatibility layer or compiler. (Note that its cousin Titanium Desktopis Web-based, allowing you to write HTML/JS applications that run inside a native wrapper on the desktop.)So Titanium allows Web developers to produce high-performance, easily skinnable native apps using JavaScript and a little XML, i.e. without learning Objective-C or Cocoa Touch. My simple test app blew away the true Web frameworks in terms of performance, and wasn’t much harder to put together.But that advantage is also its greatest disadvantage: you can only target the platforms Titanium supports, and you’re tied to their developer tools. As if to prove this point, my test app quickly got into a state where it wouldn’t launch on the iPhone. Titanium doesn’t include much of a debugger; Titanium projects can’t be run and debugged in XCode; and it ran fine in the simulator, leaving me with no real way to attack the problem.