102
What’s Coming Next in Sencha Frameworks

What's Coming Next in Sencha Frameworks

Embed Size (px)

DESCRIPTION

Don Griffin at ModUX 2013 http://moduxcon.com

Citation preview

Page 1: What's Coming Next in Sencha Frameworks

What’s ComingNext in

Sencha Frameworks

Page 2: What's Coming Next in Sencha Frameworks

Don GriffinEngineering Manager

[email protected]@dongryphon

Page 3: What's Coming Next in Sencha Frameworks

FrameworkGoals

Page 4: What's Coming Next in Sencha Frameworks

Awesome Apps

Scalable Development

Device Compatibility

Goals

Page 5: What's Coming Next in Sencha Frameworks

CommonCore

Page 6: What's Coming Next in Sencha Frameworks

sencha-core

Page 7: What's Coming Next in Sencha Frameworks

sencha-core

Goals

Page 8: What's Coming Next in Sencha Frameworks

Consistency

Compatibility

sencha-core : Goals

Page 9: What's Coming Next in Sencha Frameworks

sencha-core

Content

Page 10: What's Coming Next in Sencha Frameworks

sencha-core : Content

Feature / EnvironmentDetection

Ext.env,  Ext.feature,Ext.browser,  Ext.os,Ext.supports,  Ext.is

Page 11: What's Coming Next in Sencha Frameworks

Utilities

XTemplate,  Ext.Array,Ext.Object,  Ext.String,Ext.Function,  Ext.Date,

...

sencha-core : Content

Page 12: What's Coming Next in Sencha Frameworks

Class System

sencha-core : Content

Page 13: What's Coming Next in Sencha Frameworks

Dynamic Loader

sencha-core : Content

Page 14: What's Coming Next in Sencha Frameworks

Momentum Scroller

sencha-core : Content

Page 15: What's Coming Next in Sencha Frameworks

Delegated Event System

sencha-core : Content

Page 16: What's Coming Next in Sencha Frameworks

Gesture Recognition

sencha-core : Content

Page 17: What's Coming Next in Sencha Frameworks

Ext.data

Investigating

sencha-core : Content

Page 18: What's Coming Next in Sencha Frameworks

Charts

Page 19: What's Coming Next in Sencha Frameworks

Charts - Today

Ext JS

Ext.chart

SenchaTouchExt.chart

Page 20: What's Coming Next in Sencha Frameworks

Charts - Today

Ext JS

Page 21: What's Coming Next in Sencha Frameworks

Charts - Ext JS Today

Designed for Desktop

Page 22: What's Coming Next in Sencha Frameworks

Charts - Ext JS Today

Mouse Input

Page 23: What's Coming Next in Sencha Frameworks

Charts - Ext JS Today

Plenty of Memory & CPU

Page 24: What's Coming Next in Sencha Frameworks

Charts - Today

Sencha Touch

Page 25: What's Coming Next in Sencha Frameworks

Charts - Touch Today

Designed for Touch Input

Page 26: What's Coming Next in Sencha Frameworks

Charts - Touch Today

Constrained Memory

Page 27: What's Coming Next in Sencha Frameworks

Charts - Touch Today

Limited CPU

Page 28: What's Coming Next in Sencha Frameworks

Charts - Touch Today

Large Datasets

Page 29: What's Coming Next in Sencha Frameworks

Charts - Going Forward

Unification

Leverage Gains

Easy Migration

Page 30: What's Coming Next in Sencha Frameworks

Charts

Ext JS

ext-chartsExt.chart

SenchaTouchExt.chartsencha-charts

Today

Packages

Page 31: What's Coming Next in Sencha Frameworks

Sencha Touch

Page 32: What's Coming Next in Sencha Frameworks

NewThemes

Page 33: What's Coming Next in Sencha Frameworks

Blackberry 10

Page 34: What's Coming Next in Sencha Frameworks
Page 35: What's Coming Next in Sencha Frameworks

Cordova /PhoneGap

Page 36: What's Coming Next in Sencha Frameworks

Ext.device.*

Page 37: What's Coming Next in Sencha Frameworks

sencha  cordova  init

Page 38: What's Coming Next in Sencha Frameworks

sencha  phonegap  init

Page 39: What's Coming Next in Sencha Frameworks

TouchGrid

Page 40: What's Coming Next in Sencha Frameworks

Demo

Page 41: What's Coming Next in Sencha Frameworks

Ext JS

Page 42: What's Coming Next in Sencha Frameworks

TouchEvents

Page 43: What's Coming Next in Sencha Frameworks

tapswipe

pinch

touchmove

touchstart/end

longpressrotate

doubletap

tapcancel

singletap

pinchstart/end

rotatestart/end

drag

Page 44: What's Coming Next in Sencha Frameworks

el.on({      click:  this.onClick});el.on({      tap:  this.onClick});

Translated

Page 45: What's Coming Next in Sencha Frameworks

Grid

Page 46: What's Coming Next in Sencha Frameworks

CellUpdating

Page 47: What's Coming Next in Sencha Frameworks

Custom Rendererscolumns:  [{      text:  '%  Change',      dataIndex:  'field',

     renderer:  function  (v)  {            var  c  =  (v  <  0)  ?  'red'  :  'green';            return  '<span  style="color:'+c+';">'  +                      Ext.util.Format.number(v,  '0.00')  +                '</span>';      }}]

Page 48: What's Coming Next in Sencha Frameworks

Anatomy of a Grid Cell

<tr>    <td  class="...">        <div  class="x-­‐grid-­‐cell-­‐inner">            <span  style="color:red">...</span>        </div>    </td></tr>

Page 49: What's Coming Next in Sencha Frameworks

Grid Updates Today

record.set('field',  42);

Page 50: What's Coming Next in Sencha Frameworks

Grid Updates Today

Render

The Cell

...Again

Page 51: What's Coming Next in Sencha Frameworks

Grid Updates Today

<tr>    <td  class="...">        <div  class="x-­‐grid-­‐cell-­‐inner">            <span  style="color:red">...</span>        </div>    </td></tr>

?

Page 52: What's Coming Next in Sencha Frameworks

Grid Updates TodayThe full signature for renderer is:

       function  (value,                            cellData,  //  problem  #1                            record,                            rowIndex,                            columnIndex,                            store,                            view);

Page 53: What's Coming Next in Sencha Frameworks

Grid Updates Today

cellData.innerCls

vs.

<div>

Page 54: What's Coming Next in Sencha Frameworks

Grid Updates Today

<tr>    <td  class="...">        <div  class="x-­‐grid-­‐cell-­‐inner">            <span  style="color:red">...</span>        </div>    </td></tr>

?

Page 55: What's Coming Next in Sencha Frameworks

Grid Updates Today

cellData.tdCls

vs.

<td>

Page 56: What's Coming Next in Sencha Frameworks

Grid Updates Today

<tr>    <td  class="...">        <div  class="x-­‐grid-­‐cell-­‐inner">            <span  style="color:red">...</span>        </div>    </td></tr>

Page 57: What's Coming Next in Sencha Frameworks

Grid Updates Today

Not so bad

?

Page 58: What's Coming Next in Sencha Frameworks

Grid Updates Today

record.set('other',  2);

Page 59: What's Coming Next in Sencha Frameworks

Grid Updates TodayThe full signature for renderer is:

       function  (value,                            cellData,                            record,      //  problem  #2                            rowIndex,                            columnIndex,                            store,                            view);

Page 60: What's Coming Next in Sencha Frameworks

Grid Updates Today

When

Any

Field Changes?!

Page 61: What's Coming Next in Sencha Frameworks

Grid Cell Updaters

update  !==  render

Page 62: What's Coming Next in Sencha Frameworks

Grid Cell Updaterscolumns:  [{      text:  '%  Change',      dataIndex:  'fieldName',      depends:  ['field2',  'field3'],      renderer:  ...,

     updater:  function  (el,  v,  record)  {            var  sp  =  Ext.fly(el).down('span',  true);

           sp.style.color  =  (v  <  0)  ?  'red'  :  'green';            sp.firstChild.data  =                  Ext.util.Format.number(v,  '0.00');      }}]

Page 63: What's Coming Next in Sencha Frameworks

Grid Cell Updaters

Minimal DOM

Change

Page 64: What's Coming Next in Sencha Frameworks

Grid Cell Updaters

Only When

Needed

Page 65: What's Coming Next in Sencha Frameworks

BufferedUpdates

Page 66: What's Coming Next in Sencha Frameworks

Buffered Updates

Configure

Maximum

Rate

Page 67: What's Coming Next in Sencha Frameworks

Buffered Updates

Tracks

Field

Changes

Page 68: What's Coming Next in Sencha Frameworks

Gadgets

Page 69: What's Coming Next in Sencha Frameworks

Gadgets

ThinkFlyweight

Components

Page 70: What's Coming Next in Sencha Frameworks

Gadgets

Minimal Life-cycle

Page 71: What's Coming Next in Sencha Frameworks

Gadgets

Data Bound

Page 72: What's Coming Next in Sencha Frameworks

Gadgets

Gadget el0

childEl childEl

elel1

childEl childEl

+data

+data

Page 73: What's Coming Next in Sencha Frameworks

Gadgets

DeclarativeListeners

Page 74: What's Coming Next in Sencha Frameworks

GadgetsExt.define('Ext.gadget.Slider',        extend:  'Ext.gadget.Gadget',...        listeners:  {                mousedown:  'onMouseDown',                dragstart:  'cancelDrag',                drag:  'cancelDrag',                dragend:  'cancelDrag'        },

Page 75: What's Coming Next in Sencha Frameworks

Gadgets

Listenersin

childEls

Page 76: What's Coming Next in Sencha Frameworks

Gadgets

Eventsare

Delegated

Page 77: What's Coming Next in Sencha Frameworks

Gadgets

gadget.attach(data,  el);

Page 78: What's Coming Next in Sencha Frameworks

Gadgets - Grid Column

columns:  [{        xtype:  'gadgetcolumn',        dataIndex:  'status',        gadget:  'progressbar'}]

Configured on columns similar to ‘editor’

Page 79: What's Coming Next in Sencha Frameworks

Gadgets - Grid Column

columns:  [{        xtype:  'gadgetcolumn',        gadget:  {                type:  'button',                text:  'Remove'        }}]

Page 80: What's Coming Next in Sencha Frameworks

Gadgets - Grid Column

columns:  [{        xtype:  'gadgetcolumn',        dataIndex:  'size',        gadget:  'slider'}]

In some case it can even edit like an ‘editor’

Page 81: What's Coming Next in Sencha Frameworks

Gadgets - Grid Column

columns:  [{        text:  'Trend',        gadget:  {                type:  'sparkline.line',                width:  '100%',                tipTpl:  'Price:  {y:number("0.00")}'        }}]

Page 82: What's Coming Next in Sencha Frameworks

Demo

Page 83: What's Coming Next in Sencha Frameworks

MVCRouting

Page 84: What's Coming Next in Sencha Frameworks

Address Bar

Controller Methods

Page 85: What's Coming Next in Sencha Frameworks

http://www.foo.com/app#foo/bar

controller.handleFooBar()

Page 86: What's Coming Next in Sencha Frameworks

Ext.define('MyApp.controller.Foo',  {        extend:  'Ext.app.Controller',

       config  :  {                routes  :  {                        'foo/bar':  'handleFoo'                }        },

       handleFoo:  function  ()  {                ...        }});

Page 87: What's Coming Next in Sencha Frameworks

What about Parameters?

Page 88: What's Coming Next in Sencha Frameworks

http://www.foo.com/app#foo/bar/42

controller.handleFooBar(42)

Page 89: What's Coming Next in Sencha Frameworks

       config  :  {                routes  :  {                        'foo/bar/:id':  'handleFooBar'                }        },

       handleFooBar:  function  (id)  {                ...        }

Page 90: What's Coming Next in Sencha Frameworks

Validating Actions

Page 91: What's Coming Next in Sencha Frameworks

       config  :  {                routes  :  {                        'foo/bar/:id':  {                                action:  'handleFoo',                                before:  'beforeFoo'                        }                }        },

       beforeFoo:  function  (id,  action)  {                ...  validate  action  ...        }

Page 92: What's Coming Next in Sencha Frameworks

Forms

Page 93: What's Coming Next in Sencha Frameworks

Ext.picker.Color

Page 94: What's Coming Next in Sencha Frameworks

Ext.button.Segmented

Page 95: What's Coming Next in Sencha Frameworks

Ext.form.field.Tag

Page 96: What's Coming Next in Sencha Frameworks

Demo

Page 97: What's Coming Next in Sencha Frameworks

BorderLayout

Page 98: What's Coming Next in Sencha Frameworks

Region Groups

Shared space for Regions

Page 99: What's Coming Next in Sencha Frameworks

Group Arrangement

TabsBoxes

Accordion

Page 100: What's Coming Next in Sencha Frameworks

Stateful

Item Persistence

Page 101: What's Coming Next in Sencha Frameworks

Demo

Page 102: What's Coming Next in Sencha Frameworks

Conclusion

• Contact Info- [email protected] @dongryphon