Sencha Touch 2.0
sencha.com
sencha.com
But then I found that I'm kinda having to roll a lot of my own UI elements, using old school CSS and Javascript. I'm combining iScroll (a javascript scroller for touch drag scrolling). It's all very interesting and exciting, but it certainly feels like more of a "Research" project and less of a "Development" project, because there are no real models of how things are done to look at. I feel like I'm constantly blazing a trail of semi-undiscovered country.
It looks like Sencha is taking a different approach, and implementing some of these UI elements in native code, with different implementations on different platforms, rather than it being just a traditional DOM app?
Both are nice. Sencha Touch expects certain conventions be followed which can be great if you don't trust your (or your team members') discipline. But it can also be a bit full of magic if you don't know your way around the ecosystem. Luckily the documentation is pretty great, the team is responsive to their forums and the community is pretty engaged and helpful. Also, the Designer is wonderful!
JQMobile is wonderful for teams that are used to more 'traditional' (read: more server side heavy) web apps and/or know JQuery like the back of their hand (which is many of us these days) and that can put together disciplined code without much supervision.
I use them both and I like them both. I am looking forward to developments on both sides.
Ofcourse it's not a native app, and you can tell. Fidelity is the downside of using ST2 instead of native. The upside is easier deployment (it's just a web app), and ios, android and blackberry support from a single codebase (windows phone is coming, but not ready yet).
Don't waste your time: Grab iScroll and roll your own mobile webapp.
Choice of sencha touch also depends on where the majority of your user base lives. If I've to deliver something to India, 300KB in a webapp would be impossible given the great connectivity over phones here.
Poorly documented - well not exactly, in fact they've made a great effort to produce useful guides. API docs let your own add comments within the docs too.
Themeing - delightful, I get great control over how my app looks. I've built a nice abstraction atop their scss code that enables me to produce new themes for my app with 10-15 lines of code and deliver it to new customers. Thx to scss/compass.
Frequency of Pain in the Ass while working with it for 2+ months - very less compared to most other frameworks.
Amount of code you write over about the 300KB - quite less, unless your UI is completely completely different (mine is).
Integrating with your backend's APIs - smooth as silk, thanks to the awesome data store and model classes. They've been there since 1.1. They've been there since pre-backbone era.
Now they've got scaffolding tools to produce skeletons too, in case you were confused about the MVC approach which was unclear for quite some time. Studying examples helps a lot. My app has become too heavy - 20+ views, 15+ custom UI components, 8+ stores, 20+ controllers. Their MVC & the new class system results in a very maintainable code. Though I'm in the phase of re-architecturing my app and implement a view cache as seen in kitchen sink. I also feel putting in many sencha classes is heavy, I plan to reduce the views and controllers as much as possible. Our initial UI was done by a graphic designer in photoshop, it didn't care much about sencha touch's existing components. In turn trying to replicate the photoshop work as much as possible, has also resulted in some slow performance (translucent backdrops, shadows)
I'm heading on for a re-write with performance in mind. Been using sencha touch 2 right from alphas in Nov/Dec AFAIR. It's gone through some really sweet changes from 1.1. Kudos to sencha team for knowing what exactly their user-base needs.
Also, for some weird reason I can't view the main content on Sencha's site. http://dl.dropbox.com/u/2664274/SC20120307-203127.jpg
My impression- there is still a huge different in the "feeling" of a native app v. a Sencha app. As a "mobile first" developer, I wouldn't dream of using Sencha.
The good news for Sencha is that many companies will prioritize cost/platform reach and a "good enough" experience will be, well, good enough.
This alone, makes the app clunky.
On "feeling fast enough", let's pick a jquery mobile case, I tried http://www.jqmgallery.com/2012/02/11/sharksfrenzy/ on galaxy s2 (dual core, etc) and iPhone 4s. The list (notice its translucent, and overly decorated) scrolls like snail on the android phone. While it flows very smoothly on iPhone 4s.
A similar list would do better than that on Android if done in Sencha Touch 2.
As for "feeling", however, there are a ton of little things that are broken: the blue touch highlight sometimes clears and sometimes doesn't (seemingly dependent on the target of the link, not the source), they are doing some silly HTML5 pushState mechanism to mess with the back button incorrectly (specifically, pushing a new state when you go "back" in the UI when that should really pop a state), etc..
The thing that is really freaking me out is that I'm having a hard time figuring out if they are using native scrolling or not (as in, on iOS 5.0, you can just say "this div is scrollable", and not have to re-implement the behavior): the curve seems wrong and glitchy, but they have nailed enough of the actual visual elements that it is no longer obvious to me that it isn't just that they figured out a way to make the native scrolling perform poorly. ;P
I've used Sencha Touch before to provide a nice fat-finger-friendly version of Sencha's Ext-JS user interfaces on the iPad and it's a nice framework for providing rich UI components and also helps you segregate your UI itself into models, views and controllers.
I've used PhoneGap to wrap web-based projects for native device access to APIs you can't get a hold of using plain javascript or that wouldn't be exposed via Sencha Touch - PhoneGap provides an app shell, a UIWebView to execute your web app inside and a lot of nicely wrapped device level APIs accessible to your javascript code.
If you just want the web app stuff, Sencha Touch is really nice but a little heavy compared to options like jQuery Mobile so I'd use it in future for things that are very custom-component heavy like grids and complex forms, and for bigger applications where compartmentalisation is more important - whereas I'd stick to something like jQuery Mobile for just mobile-friendly UI elements like buttons and basic form controls or for a more simple app.
Sencha Touch has a bit of a learning curve compared to typical web app work, as the entire interface is typically declared within Sencha and UI elements instantiated and passed around, whereas with jQuery Mobile or the likes you can get away with just making it up mostly in HTML and throwing in JS components as and when you need them. To me, Sencha Touch is a slightly bigger all-or-nothing approach.
PhoneGap I would use in general any time I had to get access to device level APIs that ST v2.0 hasn't provided or anything else in bespoke native code that can't be done within a web app.
See towards the end - http://vimeo.com/37974749 . The Ext.device.[Camera,Device,Connection,Geolocation,Notification,Orientation] APIs support both Phonegap and their own native packager.