senchacon: sencha touch custom components

93
Jay Garcia, CTO & Co-Founder, Modus Create @ModusJesus [email protected] Sencha Touch Custom Components Monday, July 22, 13

Upload: patrick-sheridan

Post on 26-Jan-2015

129 views

Category:

Technology


6 download

DESCRIPTION

SenchaCon preso, Sencha Touch Custom Components with Jay Garcia, CTO & Co-Founder, Modus Create.

TRANSCRIPT

Page 1: SenchaCon: Sencha Touch Custom Components

Jay Garcia, CTO & Co-Founder, Modus Create

@[email protected]

Sencha Touch Custom Components

Monday, July 22, 13

Page 2: SenchaCon: Sencha Touch Custom Components

Agenda• Discuss the creation of custom Touch components• Explore some of the tricks of the trade• Look at some code that enables custom UI

Monday, July 22, 13

Page 3: SenchaCon: Sencha Touch Custom Components

About Me• CTO & Co-Founder Modus Create• Started with Touch in 2009• Author of

- Ext JS in Action (3.0 & 4.0)- Sencha Touch in Action

• Sencha Community supporter since 2006

Monday, July 22, 13

Page 4: SenchaCon: Sencha Touch Custom Components

Compositevs

Custom

Monday, July 22, 13

Page 5: SenchaCon: Sencha Touch Custom Components

Why create custom Touch components?

Monday, July 22, 13

Page 6: SenchaCon: Sencha Touch Custom Components

Custom Functionality!• Requires us to put our thinking caps on- Write our own DOM renderers

- Custom styles created- DOM listeners must be applied- Interactions must be hand-coded- House cleaning is up to you!

Monday, July 22, 13

Page 7: SenchaCon: Sencha Touch Custom Components

Swipe a list item to reveal actions underneath

Monday, July 22, 13

Page 8: SenchaCon: Sencha Touch Custom Components

Custom carousel with dynamic image loader

Monday, July 22, 13

Page 9: SenchaCon: Sencha Touch Custom Components

Custom audio FFT data renderer

Monday, July 22, 13

Page 10: SenchaCon: Sencha Touch Custom Components

What do I need to know to create custom

components?

Monday, July 22, 13

Page 11: SenchaCon: Sencha Touch Custom Components

What you need to know• HTML5 semantics• CSS3• SASS, Compass• Touch component lifecycle basics• Touch Class System

- Config system- Extending- Overriding- Build process

Monday, July 22, 13

Page 12: SenchaCon: Sencha Touch Custom Components

Choosing which component to extend

Monday, July 22, 13

Page 13: SenchaCon: Sencha Touch Custom Components

Extend Ext.Component

Monday, July 22, 13

Page 14: SenchaCon: Sencha Touch Custom Components

Custom carousel with dynamic image loader

Monday, July 22, 13

Page 15: SenchaCon: Sencha Touch Custom Components

Two extensions required for this one!

Monday, July 22, 13

Page 16: SenchaCon: Sencha Touch Custom Components

The anatomy of a custom component

Monday, July 22, 13

Page 17: SenchaCon: Sencha Touch Custom Components

Let’s destruct this one component

Monday, July 22, 13

Page 18: SenchaCon: Sencha Touch Custom Components

Anatomy of a custom component

Monday, July 22, 13

Page 19: SenchaCon: Sencha Touch Custom Components

Anatomy of a custom component

Class Name

Monday, July 22, 13

Page 20: SenchaCon: Sencha Touch Custom Components

Anatomy of a custom component

Monday, July 22, 13

Page 21: SenchaCon: Sencha Touch Custom Components

Anatomy of a custom component

Superclass

Monday, July 22, 13

Page 22: SenchaCon: Sencha Touch Custom Components

Anatomy of a custom component

Monday, July 22, 13

Page 23: SenchaCon: Sencha Touch Custom Components

Anatomy of a custom component

XType

Monday, July 22, 13

Page 24: SenchaCon: Sencha Touch Custom Components

Anatomy of a custom component

Monday, July 22, 13

Page 25: SenchaCon: Sencha Touch Custom Components

Anatomy of a custom component

Classes to require

Monday, July 22, 13

Page 26: SenchaCon: Sencha Touch Custom Components

Anatomy of a custom component

Monday, July 22, 13

Page 27: SenchaCon: Sencha Touch Custom Components

Anatomy of a custom component

Config block

Monday, July 22, 13

Page 28: SenchaCon: Sencha Touch Custom Components

Anatomy of a custom component

Monday, July 22, 13

Page 29: SenchaCon: Sencha Touch Custom Components

Anatomy of a custom component

Applier function

Monday, July 22, 13

Page 30: SenchaCon: Sencha Touch Custom Components

Anatomy of a custom component

Monday, July 22, 13

Page 31: SenchaCon: Sencha Touch Custom Components

Anatomy of a custom component

Initialize function

Monday, July 22, 13

Page 32: SenchaCon: Sencha Touch Custom Components

Anatomy of a custom component

Monday, July 22, 13

Page 33: SenchaCon: Sencha Touch Custom Components

Anatomy of a custom component

Event handlers

Monday, July 22, 13

Page 34: SenchaCon: Sencha Touch Custom Components

Anatomy of a custom component

Monday, July 22, 13

Page 35: SenchaCon: Sencha Touch Custom Components

Anatomy of a custom component

Utility methods

Monday, July 22, 13

Page 36: SenchaCon: Sencha Touch Custom Components

Anatomy of a custom component

Monday, July 22, 13

Page 37: SenchaCon: Sencha Touch Custom Components

Constructing a custom Component

Monday, July 22, 13

Page 38: SenchaCon: Sencha Touch Custom Components

Custom DOM

Monday, July 22, 13

Page 39: SenchaCon: Sencha Touch Custom Components

Custom DOM

JiT instance of XTemplate

Monday, July 22, 13

Page 40: SenchaCon: Sencha Touch Custom Components

Custom DOM

Monday, July 22, 13

Page 41: SenchaCon: Sencha Touch Custom Components

Custom DOMLight DOM

Monday, July 22, 13

Page 42: SenchaCon: Sencha Touch Custom Components

Custom DOM

Monday, July 22, 13

Page 43: SenchaCon: Sencha Touch Custom Components

Register event listeners

Monday, July 22, 13

Page 44: SenchaCon: Sencha Touch Custom Components

Register event listeners

Register drag events

Monday, July 22, 13

Page 45: SenchaCon: Sencha Touch Custom Components

Register event listeners

Monday, July 22, 13

Page 46: SenchaCon: Sencha Touch Custom Components

Custom animations

Monday, July 22, 13

Page 47: SenchaCon: Sencha Touch Custom Components

Custom animations

Animate elements

Monday, July 22, 13

Page 48: SenchaCon: Sencha Touch Custom Components

Custom animations

Monday, July 22, 13

Page 49: SenchaCon: Sencha Touch Custom Components

Cleanup

Monday, July 22, 13

Page 50: SenchaCon: Sencha Touch Custom Components

CleanupCreate post-

transition event handler

Monday, July 22, 13

Page 51: SenchaCon: Sencha Touch Custom Components

Cleanup

Monday, July 22, 13

Page 52: SenchaCon: Sencha Touch Custom Components

Cleanup

Register event handler

Monday, July 22, 13

Page 53: SenchaCon: Sencha Touch Custom Components

Cleanup

Monday, July 22, 13

Page 54: SenchaCon: Sencha Touch Custom Components

Cleanup

Invoke reset animation

Monday, July 22, 13

Page 55: SenchaCon: Sencha Touch Custom Components

Cleanup

Monday, July 22, 13

Page 56: SenchaCon: Sencha Touch Custom Components

Cleanup

Initiate cleanup

Monday, July 22, 13

Page 57: SenchaCon: Sencha Touch Custom Components

Cleanup

Monday, July 22, 13

Page 58: SenchaCon: Sencha Touch Custom Components

Cleanup part 2

Monday, July 22, 13

Page 59: SenchaCon: Sencha Touch Custom Components

Cleanup part 2

Destroy element

Monday, July 22, 13

Page 60: SenchaCon: Sencha Touch Custom Components

Cleanup part 2

Monday, July 22, 13

Page 61: SenchaCon: Sencha Touch Custom Components

Custom component tasks

Monday, July 22, 13

Page 62: SenchaCon: Sencha Touch Custom Components

Custom carousel with dynamic image loader

Monday, July 22, 13

Page 63: SenchaCon: Sencha Touch Custom Components

App details• Mashup of Rotten Tomatoes &

YouTube APIs- Uses a custom proxy for data

retention- Silk JS & Redis

• Recreates the feel of the Netflix mobile application

Monday, July 22, 13

Page 64: SenchaCon: Sencha Touch Custom Components

Problem• All trailer images download at the

same time• SLOW on 3G!

- Could incur data usage for users unnecessarily

• How do we fix this?

Monday, July 22, 13

Page 65: SenchaCon: Sencha Touch Custom Components

Solution• Custom extension to Container• Listens to scroller scroll event

- Loads images when they need to be

Monday, July 22, 13

Page 66: SenchaCon: Sencha Touch Custom Components

Configure custom DOM

Monday, July 22, 13

Page 67: SenchaCon: Sencha Touch Custom Components

Register event listeners

Monday, July 22, 13

Page 68: SenchaCon: Sencha Touch Custom Components

Register event listeners

Scroll event listener

Monday, July 22, 13

Page 69: SenchaCon: Sencha Touch Custom Components

Register event listeners

Monday, July 22, 13

Page 70: SenchaCon: Sencha Touch Custom Components

Load images on demand

Monday, July 22, 13

Page 71: SenchaCon: Sencha Touch Custom Components

Load images on demand

Load image

Monday, July 22, 13

Page 72: SenchaCon: Sencha Touch Custom Components

Load images on demand

Monday, July 22, 13

Page 73: SenchaCon: Sencha Touch Custom Components

DEMO

Monday, July 22, 13

Page 74: SenchaCon: Sencha Touch Custom Components

Custom audio FFT data renderer

Monday, July 22, 13

Page 75: SenchaCon: Sencha Touch Custom Components

App details• Amiga Mod music Player• Touch 2.2.1 UI• Driven by custom PhoneGap plugin

- C++ Library wrapped with ObjC• Renders FFT audio data • Custom Canvas component

- Three different modes• Really fast!!

- 20ms return cycle

Monday, July 22, 13

Page 76: SenchaCon: Sencha Touch Custom Components

DEMO

Monday, July 22, 13

Page 77: SenchaCon: Sencha Touch Custom Components

How this app works

LibBassC++

LibBassC++

Cordova Plugin

ObjectiveC

Cordova

Sencha Touch

Monday, July 22, 13

Page 78: SenchaCon: Sencha Touch Custom Components

How this app works

LibBassC++

LibBassC++

Cordova Plugin

ObjectiveC

Cordova

Sencha Touch

• Directory contents• Load a song• Play a song• Get song FFT data

Monday, July 22, 13

Page 79: SenchaCon: Sencha Touch Custom Components

How this app works

LibBassC++

LibBassC++

Cordova Plugin

ObjectiveC

Cordova

Sencha Touch

• Directory contents• Load a song• Play a song• Get song FFT data

20ms

Monday, July 22, 13

Page 80: SenchaCon: Sencha Touch Custom Components

Poll Cordova for data

Monday, July 22, 13

Page 81: SenchaCon: Sencha Touch Custom Components

Poll Cordova for data

Update data on View

Monday, July 22, 13

Page 82: SenchaCon: Sencha Touch Custom Components

Poll Cordova for data

Monday, July 22, 13

Page 83: SenchaCon: Sencha Touch Custom Components

Render data

Monday, July 22, 13

Page 84: SenchaCon: Sencha Touch Custom Components

Render data

Monday, July 22, 13

Page 85: SenchaCon: Sencha Touch Custom Components

Render data

Clear canvas

Monday, July 22, 13

Page 86: SenchaCon: Sencha Touch Custom Components

Render data

Monday, July 22, 13

Page 87: SenchaCon: Sencha Touch Custom Components

Render data

Update canvas

Monday, July 22, 13

Page 88: SenchaCon: Sencha Touch Custom Components

Render data

Monday, July 22, 13

Page 89: SenchaCon: Sencha Touch Custom Components

Resources

Monday, July 22, 13

Page 90: SenchaCon: Sencha Touch Custom Components

Resources

Monday, July 22, 13

Page 91: SenchaCon: Sencha Touch Custom Components

More about custom components

Friday 11:30AMRoom E2

Monday, July 22, 13

Page 92: SenchaCon: Sencha Touch Custom Components

Wrapping up• Think speed • Light DOM• Optimized JavaScript

• Write your own event handlers• Clean up after yourself!• Remove unnecessary event handlers• Remove DOM when not needed

Monday, July 22, 13

Page 93: SenchaCon: Sencha Touch Custom Components

Take the Survey!• Session Survey

- Available on the SenchaCon mobile app

- http://app.senchacon.com

• Be Social!- @SenchaCon- #SenchaCon- @ModusJesus- @ModusCreate

Monday, July 22, 13