Download - Ext JS (Greek)

Transcript
Page 1: Ext JS (Greek)

Ext JS

Πως να μετατρέψετε τις σελίδες σας σε interactive applications

Σουργκούνης Θεοδόσηςwww.kamibu.com

Page 2: Ext JS (Greek)

Τι είναι το Ext JS;Το Ext JS είναι ένα framework που βοηθάει στην ανάπτυξη διαδραστικών σελίδων

Γιατί το χρειαζόμαστε;Επιταχύνει τη διαδικασία της ανάπτυξης, διευκολύνει την ομοιομορφία και βοηθάει στη σωστή δομή του κώδικα

Είναι συμβατό;Το Ext JS είναι συμβατό με όλους τους μεγάλους browsers που χρησιμοποιούνται σήμερα

Παραδείγματα: http://www.kamibu.com/techtalk/extjs

Page 3: Ext JS (Greek)

Ext.MessageBox

Ext.MessageBox.alert( 'Title here', 'Hello world!' );

Ext.MessageBox.prompt( 'Title here', 'Insert value' );

Ext.MessageBox.wait( 'Please wait...' );

Ext.MessageBox.progress( 'title', 'almost ready', '2%' );

Page 4: Ext JS (Greek)

Selectors ( Ext.DomQuery )

Επιλογή με ID: var el = Ext.get( 'my-div' );

Επιλογή με αναφορά: var el = Ext.get( myDivElement );

Επιλογή με CSS selector: var el = Ext.select( selector );

Element: 'div > span'Class or id: '#my-div .class'Attribute: 'form[method=post]'Pseudo Classes: 'div:first-child'CSS Value: 'div{background*=no-repeat}'

Page 5: Ext JS (Greek)

Ext.Element

el.setSize( 100, 200, { duration: 1, easing: 'backBoth'});

el.createChild({ tag:'h1', id:'header', html:'Header 1'});

Page 6: Ext JS (Greek)

Events

Φυσικά events (click, mouseover, keypress ... )

Software driven events ( datachanged, beforedestroy ... )

el.on( 'click', doSomething );

Ορίσματα στην συνάρτηση doSomething1. eventObject2. DOM element

Page 7: Ext JS (Greek)

The Component Model

Page 8: Ext JS (Greek)

The Component Model

var panel1 = new Ext.Panel({ height: 200, width: 300, title: "I am a happy panel!!", html: "Hello there!"});

var panel2 = { xtype: 'panel', width: 300, height: 200, title: "Plain Panel", html: 'Panel with xtype specified' listeners: { click: fn }};

new Ext.Window({ id: 'myWin', height: 200, width: 300, title: "A window", items: [ panel1, panel2 ]});

Page 9: Ext JS (Greek)

The Component Life Cycle

Page 10: Ext JS (Greek)

Containersvar myWin = new Ext.Window({ height: 400, width: 400, items: [{ xtype: 'panel', html: 'I am a panel', frame: true, height: 100 },{ html: '<b> I am a bold panel</b>', frame: true }]});myWin.show();

Page 11: Ext JS (Greek)

Containers

Ext.getCmp( 'myWin' ).add({ title: 'Appended Panel', id: 'addedPanel', html: "hello there!"});Ext.getCmp( 'myWin' ).doLayout();

var panel = Ext.getCmp( 'addedPanel' );Ext.getCmp( 'myWin' ).remove( panel );

Ext.getCmp( 'myWin' ).findByType( 'panel' );

Page 12: Ext JS (Greek)

Panel

Page 13: Ext JS (Greek)

Panelvar myPanel = new Ext.Panel({ width: 200, height: 150, collapsible: true, renderTo: Ext.getBody(), tbar: TopToolbar, bbar: BottomToolbar, html: 'My first Toolbar Panel!' tools: [ { id: 'gear' },{ id: 'help' }]});

Page 14: Ext JS (Greek)

Buttons and Menus

new Ext.Button({ text: 'Plain Button', handler: handler menu: { defaults: { checked: false, }, items: [ { text: 'Red' }, { text: 'Green' }, { text: 'Blue' } ] }});

Page 15: Ext JS (Greek)

Toolbarsvar toolbar = { items: [ { text: 'Add', }, '->', 'Select one of theese: ', { xtype: 'combo', store: [ 'Toolbars', 'Are', 'Awesome' ] } ]}

Page 16: Ext JS (Greek)

Window

var win = new Ext.Window({ html : 'My first Window', id : 'myWin', height : 200, width : 300, constrain : true});win.show();

Page 17: Ext JS (Greek)

Windowvar win = new Ext.Window({ height: 75, width: 200, modal: true, title: 'This is a window', html: 'Try to move or resize me. I dare you.', plain: true, border: false, resizable: false, draggable: false, closable: false, buttonAlign: 'center', buttons: [ ... ]});win.show();

Page 18: Ext JS (Greek)

Laying it all out

Page 19: Ext JS (Greek)

Container Layout

var myWin = new Ext.Window({ height : 300, width : 300, title : 'A window with a container layout', autoScroll : true, items : [ panel1, panel2 ]}

Page 20: Ext JS (Greek)

Anchor Layoutvar myWin = new Ext.Window({ height: 300, width: 300, layout: 'anchor', anchorSize: '400', items: [{ title: 'Panel1', anchor: '100%, 25%', frame: true },{ title: 'Panel2', anchor: '0, 50%', frame: true }});myWin.show();

Page 21: Ext JS (Greek)

Form Layout

var myWin = new Ext.Window({ height: 240, width: 200, bodyStyle: 'padding: 5px', layout: 'form', labelWidth: 50, defaultType: 'field', items: [{ fieldLabel: 'Name', width: 110 },{ xtype: 'combo', fieldLabel: 'Location', width: 120, store: storeObject },

{ xtype: 'panel', fieldLabel: ' ', labelSeparator: ' ', frame: true, title: 'Instructions', html: 'Please fill in the form', height: 55 }]});myWin.show();

Page 22: Ext JS (Greek)

Absolute Layout

var myWin = new Ext.Window({ height: 300, width: 300, layout: 'absolute', autoScroll: true, border: false, items: [{ title: 'Panel1', x: 50, y: 50, height: 100, width: 100, html: 'x: 50, y:50', frame: true },

{ title: 'Panel2', x: 90, y: 120, height: 75, width: 77, html: 'x: 90, y: 120', frame: true }]}).show();

Page 23: Ext JS (Greek)

Fit Layoutvar myWin = new Ext.Window({ height : 200, width : 200, layout : 'fit', border : false, items : [ { title : 'Panel1', html : 'I fit in my parent!', frame : true } ]});myWin.show();

Page 24: Ext JS (Greek)

Accordion Layoutvar myWin = new Ext.Window({ layout: 'accordion', layoutConfig: { animate: true }, items: [{ xtype: 'form', title: 'General info', items: { fieldLabel: 'Name', anchor: '-10', } },{ title: 'Instructions', html: 'Please enter information.', }]});myWin.show();

Page 25: Ext JS (Greek)

Card Layout

var myWin = new Ext.Window({ title: 'A Window with a Card layout', layout: 'card', items: [{ title: 'Bio', value: 'Tell us about yourself' },{ title: 'Congratulations', html: 'Thank you for filling out our form!' }], bbar: bottomToolbar});

myWin.show();

Page 26: Ext JS (Greek)

Column Layoutvar myWin = new Ext.Window({ id: 'myWin', title: 'A Window with a Card layout', layout: 'column', defaults: { frame: true }, items: [{ title: 'Col 1', columnWidth: .3 },{ title: 'Col 3', html: "100px fixed width", width: 100 }]});myWin.show();

Page 27: Ext JS (Greek)

Table Layoutvar myWin = new Ext.Window({ title: 'A Window with a Table layout', layout: 'table', layoutConfig: { columns: 3 }, defaults: { height: 50, width: 50 }, items: [{ html: '1', colspan: 3, width: 150 }, { html: '2', rowspan: 2, height: 100 },

{ html: '3' }, { html: '4', rowspan: 2, height: 100 }, { html: '5' }, { html: '6', colspan: 3, width: 150 }]});myWin.show();

Page 28: Ext JS (Greek)

Border Layout

Page 29: Ext JS (Greek)

Border Layoutnew Ext.Viewport({ layout: 'border', defaults: { frame: true, split: true }, items: [{ title: 'North Panel', region: 'north', height: 100, collapsible: true },{ title: 'South Panel', region: 'south', height: 75, split: false, margins: { top: 5 } },

{ title: 'East Panel', region: 'east', width: 100, minWidth: 75, maxWidth: 150, collapsible: true },{ title: 'West Panel', region: 'west', collapsible: true, collapseMode: 'mini' },{ title: 'Center Panel', region: 'center' }]});

Page 30: Ext JS (Greek)

Form panels

var form = new Ext.Form.FormPanel({ ... initialConfig: { method: 'GET', fileUpload: true, standardSubmit: false, url: 'http://...' baseParams: { foo: 'bar' } }});

Page 31: Ext JS (Greek)

Form Fieldsvar textfield = { xtype: 'textfield', fieldLabel: 'Full Name', emptyText: 'Enter your full name here!', maskRe: /[a-z]/i, msgTarget: 'side'}var browsefile = { xtype: 'textfield', fieldLabel: 'Browse for a file', inputType: 'file'}var textarea = { xtype: 'textarea',}

Page 32: Ext JS (Greek)

Combo box

var combo = { xtype: 'combo', fieldLabel: 'Select a name', store: new Ext.data.ArrayStore({ data: [ ['Jack Slocum'], ... ], fields: ['name'] }), displayField: 'name', mode: 'local'}

Ειδική περίπτωση: timefield

Page 33: Ext JS (Greek)

More form fields

var htmleditor = { xtype: 'htmleditor', fieldLabel: 'Enter any text'}

var datefield = { xtype: 'datefield', fieldLabel: 'Select date'}

var checkbox = { xtype: 'checkbox', fieldLabel: 'Click me'}

Page 34: Ext JS (Greek)

Load and SubmitΜπορούμε να υποβάλουμε τη φόρμα μας σύγχρονα ή ασύγχρονα, μέσω του ορίσματος standardSubmit. Για να υποβάλουμε τη φόρμα, εκτελούμε

myFormPanel.getForm().submit(config)

Το config στην περίπτωση της ασύγχρονης υποβολής μπορεί να περιέχει handlers, όπως onSuccess ή onFailure, ή οτιδήποτε άλλο από το initialConfig.

myFormPanel.getForm().load({ url: 'data.php',});

Page 35: Ext JS (Greek)

Trees

Page 36: Ext JS (Greek)

Trees

var rootNode = { text: 'Root Node', expanded: true, children: [ { text: 'Child 1', leaf: true },{ text: 'Child 2', children: [ ... ] } ]}

var tree = { xtype: 'treepanel', root: rootNode}

new Ext.Window({ layout: 'fit', items: tree}).show();

Page 37: Ext JS (Greek)

Data Store

Page 38: Ext JS (Greek)

How Stores work

ProxyHttpProxyScriptTagProxyMemoryProxy

ReaderArray ReaderXML ReaderJSON Reader

Page 39: Ext JS (Greek)

Grid Panel

Page 40: Ext JS (Greek)

Building a simple Grid Panelvar arrayData = [ ['Jay Gracia', 'MD' ], ['Aaron Baker', 'VA' ],];var nameRecord = Ext.data.Record.create([ 'name', 'state']);var arrayReader = new Ext.data.ArrayReader({}, nameRecord );

var memoryProxy = new Ext.data.MemoryProxy( arrayData );

var store = new Ext.data.Store({ reader: arrayReader, proxy: memoryProxy});

var store = new Ext.data.ArrayStore({ data: arrayData, fields: [ 'name', 'state' ]});

Page 41: Ext JS (Greek)

Building a simple Grid Panel

var gridView = new Ext.grid.GridView();var colModel = new Ext.grid.ColumnModel([ { header: 'Full Name', sortable: true, dataIndex: 'name' },{ header: 'State', dataIndex: 'state' }]);var selModel = new Ext.grid.RowSelectionModel({ singleSelect: true});

Page 42: Ext JS (Greek)

Building a simple Grid Panel

var grid = new Ext.grid.GridPanel({ title: 'Our first grid', store: store, view: gridView, colModel: colModel, selModel: selModel});

Page 43: Ext JS (Greek)

Ευχαριστούμε!

Ερωτήσεις;