extjs-4

88
Sencha ExtJS

Upload: eduardo-mendes-de-oliveira

Post on 12-Jan-2015

500 views

Category:

Technology


2 download

DESCRIPTION

Introdução Básica a ExtJS4

TRANSCRIPT

Page 1: ExtJS-4

Sencha ExtJS

Page 2: ExtJS-4

Eduardo Mendes ([email protected])

Introdução

2

Page 3: ExtJS-4

Eduardo Mendes ([email protected])

Ext JS

3

Implementação de aplicações ricas para a plataforma Web

Framework JavaScript da Sencha

Possui outras versões, como o Sencha Touch

Baseado em componentes

Grande comunidade de desenvolvedores

Page 5: ExtJS-4

Eduardo Mendes ([email protected])5

Cross-Browser

JavaScript

Page 6: ExtJS-4

Eduardo Mendes ([email protected])6

É um Framework FrontEnd

Deve ser utilizado com outras tecnologias para realizar a parte ServerSide

Pode integrar com outros frameworks JS

Até a versão 3 precisa de um adapter, mas agora não é mais necessário

PHPRAILS

SPRINGSTRUTS 2

PYTHON

As informações entre servidor e ExtJS são trocadas por JSON e XML

Page 7: ExtJS-4

Eduardo Mendes ([email protected])

Orientado a Objetos

7

Ext.define(Nome, configuracoes, callback);

Page 8: ExtJS-4

Eduardo Mendes ([email protected])

Carregamento Dinâmico

8

Ext.Loader.setConfig({ enabled: true }); !

Ext.Loader.setPath(‘Ext.ux’, ‘../ux’); !

Ext.require(…);

Page 9: ExtJS-4

Eduardo Mendes ([email protected])

Package Data

9

Ext.Loader.setConfig({ enabled: true }); !

Ext.Loader.setPath(‘Ext.ux’, ‘../ux’); !

Ext.require(…);

Page 10: ExtJS-4

Eduardo Mendes ([email protected])

Model Fields

10

Ext.define('User', { extend: 'Ext.data.Model', fields: [ { name: ‘id’, type: 'int'}, {name: 'name', type: 'string'} ] });

Page 11: ExtJS-4

Eduardo Mendes ([email protected])

Model Association

11

Ext.define('User', { extend: 'Ext.data.Model', fields: [‘id’,’name’], hasMany: 'Posts' }); !

Ext.define('Post', { extend: 'Ext.data.Model', fields: [‘id’,’user_id’, ‘title’, ‘body’], belongsTo: 'User' });

Page 12: ExtJS-4

Eduardo Mendes ([email protected])

Arquitetura MVC

12

Page 13: ExtJS-4

Eduardo Mendes ([email protected])

Vasta Documentação

13

Page 14: ExtJS-4

Eduardo Mendes ([email protected])

Utilizando o ExtJS

14

Page 15: ExtJS-4

Eduardo Mendes ([email protected])15

Faça o download do ExtJS no site da Sencha

Page 16: ExtJS-4

Eduardo Mendes ([email protected])16

Descompacte e renomeie

Page 17: ExtJS-4

Eduardo Mendes ([email protected])17

Estruturadocs: contém a documentação completa (que você precisa para implantá-lo em um servidor local para ser capaz de executá-lo) !

exemplos: Este contém exemplos de como usar os componentes Ext JS !

packages: contém os módulos Ext JS, empacotados !

resources: contém o CSS e imagens utilizados pelos temas Ext !

src: código fonte completo !

welcome: contém imagens utilizadas pelo index.html !

builds: arquivos adicionais !

Page 18: ExtJS-4

Eduardo Mendes ([email protected])18

Ouvindo o evento ready

Ext.onReady(function(){ <code> });

DOM

"I'm ready"

O código só executará depois que o DOM estiver "pronto"

Page 19: ExtJS-4

Eduardo Mendes ([email protected])19

Utilizando ExtJS

dowload ExtJS

carregue-o em seu documento HTML

<script src=“extjs-all.js”></script>

carregue o CSS do ExtJS

<link rel="stylesheet" type="text/css" href="resources/css/ext-all.css" />

1

2

3

Page 20: ExtJS-4

Eduardo Mendes ([email protected])20

Exemplo completo<html> <head> !

!

!

!

</head> <body></body> !

!

!

!

!

</html>

<link rel="stylesheet" type="text/css" href="../extjs/resources/css/ext-all.css" />

<script> Ext.onReady(function() { Ext.MessageBox.alert('Hello','Hello, World!'); }); </script>

<script src="../extjs/ext-all.js"></script>

Page 21: ExtJS-4

Eduardo Mendes ([email protected])

Internacionalização

21

Page 22: ExtJS-4

Eduardo Mendes ([email protected])22

Internacionalização

Page 23: ExtJS-4

Eduardo Mendes ([email protected])

Criando um Painel Simples

23

Page 24: ExtJS-4

Eduardo Mendes ([email protected])

widget.panel

24

Criando um Painel Simples

Page 25: ExtJS-4

Eduardo Mendes ([email protected])25

Criando um Painel Simples<body> <div id="painelPrincipal"></div> </body>

Ext.onReady(function () { !

!

!

!

!

!

!

!

!

});

renderTo: 'painelPrincipal', !

title: 'Painel ExtJS 4', width: 400, height: 300, frame: true, !

html: "<div id='contentID'></div>"

Ext.create('widget.panel', { !

!

!

!

!

!

!

});

Page 26: ExtJS-4

Eduardo Mendes ([email protected])

Integrando com jQuery

26

Page 27: ExtJS-4

Eduardo Mendes ([email protected])27

Criando um Painel Simples + jQuery Ext.onReady(function () { Ext.create('widget.panel', { renderTo: 'painelPrincipal', !

title: 'Painel ExtJS 4', width: 400, height: 300, frame: true, !

html: "<div id='contentID'></div>" }); $("#contentID").load("conteudo.html"); });

Page 28: ExtJS-4

Eduardo Mendes ([email protected])28

Carregando o conteúdo com jQuery

Page 29: ExtJS-4

Eduardo Mendes ([email protected])

Definindo classes

29

Page 30: ExtJS-4

Eduardo Mendes ([email protected])

Definir classes 02 maneiras

30

Ext.define(Nome, configuracoes, callback);

Ext.ClassManager(Nome, configuracoes, callback);

Page 31: ExtJS-4

Eduardo Mendes ([email protected])31

Classe Usuario

Page 32: ExtJS-4

Eduardo Mendes ([email protected])

32

Definindo uma classe Ext.onReady(function () { !

!

!

!

!

!

!

!

!

!

!

!

});

Ext.define('Usuario', { !

!

!

!

!

!

!

!

!

!

});

nome: '', senha: '', login: function() { console.log("Logando na aplicacao..."); }, logout: function() { console.log("Saindo d aplicação...") } },

function() { console.log("Callback acionado"); }

Page 33: ExtJS-4

Eduardo Mendes ([email protected])33

SobrescreverExiste um construtor padrão no ExtJS

constructor: function(options){ Ext.apply(this, options || {}); }

Page 34: ExtJS-4

Eduardo Mendes ([email protected])

34

Sobrescrevendo o construtorExt.onReady(function () { Ext.define('Usuario', { nome: '', senha: '', !

!

!

login: function() { console.log("Logando na aplicacao..."); }, logout: function() { console.log("Saindo d aplicação...") } }, … });

constructor: function(options) { Ext.apply(this, options || {}); },

Page 35: ExtJS-4

Eduardo Mendes ([email protected])

Instanciar um objeto 02 maneiras

35

Ext.create(Nome, opcoes);

Ext.ClassManager.instantiate(Nome, opcoes);

Page 36: ExtJS-4

Eduardo Mendes ([email protected])

Instanciar um objeto Usuario

36

var usuario = Ext.create('Usuario');

Page 37: ExtJS-4

Eduardo Mendes ([email protected])37

Passando parâmetros

var usuario = Ext.create(‘Usuario’, { nome: ‘Eduardo’, senha: ‘123456’ });

Page 38: ExtJS-4

Eduardo Mendes ([email protected])38

Código final Ext.onReady(function () { Ext.define('Usuario', { nome: '', senha: '', ! constructor: function (options) { Ext.apply(this, options || {}); ! console.log("Construtor chamado"); }, login: function () { console.log("Logando na aplicacao..."); }, logout: function () { console.log("Saindo d aplicação...") } }, function () { console.log("Callback acionado"); } ); ! var usuario = Ext.create('Usuario', { nome: 'Eduardo', senha: '123456' }); console.log(usuario); });

Page 39: ExtJS-4

Eduardo Mendes ([email protected])39

Refatorando Ext.define('Usuario', { nome: '', senha: '', ! constructor: function (options) { Ext.apply(this, options || {}); ! console.log("Construtor chamado"); }, login: function () { console.log("Logando na aplicacao..."); }, logout: function () { console.log("Saindo d aplicação...") } }, function () { console.log("Callback acionado"); } ); ! Ext.onReady(function () { var usuario = Ext.create('Usuario', { nome: 'Eduardo', senha: '123456' }); console.log(usuario); });

Page 40: ExtJS-4

Eduardo Mendes ([email protected])

Herança

40

Page 41: ExtJS-4

Eduardo Mendes ([email protected])41

HerançaA finalidade de utilizar herança com ExtJS é personalizar os componentes existentes para as necessidades de um sistema específico

Escolha um componente e configure suas propriedades e comportamentos

Page 42: ExtJS-4

Eduardo Mendes ([email protected])42

Herdando dos componentes ExtJS

A opção extend permite que se possa herdar e personalizar um componente ExtJS

Ext.define('MyButton', { } );

Ext.onReady(function () { Ext.create("MyButton", { !

!

}); });

O 1.º passo é utilizar o código de definição de uma classe

extend:

É necessário informar o nome completo da classe que se quer herdar

O valor informado deve ser uma String

text: ‘Olá ExtJs', renderTo: Ext.getBody()

'Ext.button.Button'

Page 44: ExtJS-4

Eduardo Mendes ([email protected])44

Herdando dos componentes ExtJS Ext.define('MyButton', { } );

Ext.onReady(function () { Ext.create("MyButton", { !

!

}); });

extend:

text: ‘Olá ExtJs', renderTo: Ext.getBody()

'Ext.button.Button'

Vamos adicionar à definição da classe a característica e o comportamento

Page 45: ExtJS-4

Eduardo Mendes ([email protected])45

Herdando dos componentes ExtJS Ext.define('MyButton', { extend: ‘Ext.button.Button' text: ‘Olá ExtJs', renderTo: Ext.getBody() !

} );

Ext.onReady(function () { Ext.create("MyButton"); });

Essa opção ainda permite que haja sobrescrita de valores

Como fazer para evitar isso?

Page 46: ExtJS-4

Eduardo Mendes ([email protected])

Adicionando propriedades finais

46

initComponent: function(){}

this.callParent();

gancho para personalizar a inicialização de um componente

faz uma chamada ao construtor da superclasse imediata

Page 47: ExtJS-4

Eduardo Mendes ([email protected])47

Propriedades finais Ext.define('MyButton', { extend: 'Ext.button.Button', initComponent: function() { this.text = "Outra frase"; this.callParent(); } } );

Ext.onReady(function () { Ext.create("MyButton"); });

Page 48: ExtJS-4

Eduardo Mendes ([email protected])48

Propriedades finais Ext.define('MyButton', { extend: 'Ext.button.Button', initComponent: function() { this.text = "Outra frase"; this.callParent(); } } );

Ext.onReady(function () { Ext.create("MyButton", { text: 'Olá ExtJS', renderTo: Ext.getBody() }); });

Page 49: ExtJS-4

Eduardo Mendes ([email protected])49

Reaproveitando o componente

<body> <section id="opcao1"></section> <section id="opcao2"></section> <section id="opcao3"></section> </body>

Page 50: ExtJS-4

Eduardo Mendes ([email protected])50

Reaproveitando o componente Ext.onReady(function () { Ext.create("MyButton", { renderTo: 'opcao1' }); !

Ext.create("MyButton", { renderTo: 'opcao2' }); !

Ext.create("MyButton", { renderTo: 'opcao3' }); !

});

<body> <section id="opcao1"></section> <section id="opcao2"></section> <section id="opcao3"></section> </body>

Page 51: ExtJS-4

Eduardo Mendes ([email protected])

Mixins

51

Page 52: ExtJS-4

Eduardo Mendes ([email protected])52

MixinsDefinem um conjunto de comportamentos e configurações reutilizáveis que podem ser mixadas a uma classe

o 1.º passo é criar uma classe para ser o mixin

Page 53: ExtJS-4

Eduardo Mendes ([email protected])53

Mixins

Um mixin pode ter qualquer número de métodos

Uma classe pode utilizar qualquer n.º de mixins

Page 54: ExtJS-4

Eduardo Mendes ([email protected])54

Mixins Locavel e Vendivel Ext.define( !

);

‘Exemplo.mixin.Locavel’, { }

alugar: function() { console.log('Imovel está disponível para aluguel!');

Ext.define( !

);

‘Exemplo.mixin.Vendivel’, { }

vender: function() { console.log('Imovel está disponível para venda!');

Page 55: ExtJS-4

Eduardo Mendes ([email protected])55

Mixins Locavel e Vendivel Ext.define('Exemplo.mixin.Locavel', { alugar: function() { console.log('Imovel está disponível para aluguel!'); } }); ! Ext.define('Exemplo.mixin.Vendivel', { vender: function() { console.log('Imovel está disponível para comprar!'); } });

Ext.define('Exemplo.imovel.Apartamento', { !

!

!

});

!

mixins: { !

!

}

!

!

alugarApartamento: ‘Exemplo.mixin.Locavel’, !

!

!

!

venderApartamento: ‘Exemplo.mixin.Vendivel’

as chaves podem possuir qualquer valor

Page 56: ExtJS-4

Eduardo Mendes ([email protected])56

Mixins Locavel e Vendivel Ext.define('Exemplo.imovel.Apartamento', { mixins: { alugarApartamento: 'Exemplo.mixin.Locavel', venderApartamento: 'Exemplo.mixin.Vendivel' } });

Ext.onReady(function () { !

var meuAp = Ext.create('Exemplo.imovel.Apartamento'); meuAp.alugar(); meuAp.vender(); !

});

Page 57: ExtJS-4

Eduardo Mendes ([email protected])

Config (getters, setters)

57

Page 58: ExtJS-4

Eduardo Mendes ([email protected])58

ConfigCria métodos acessores e modificadores de forma automática, mais utilitários

getter setter reset apply

Page 59: ExtJS-4

Eduardo Mendes ([email protected])59

Config

Ext.onReady(function () { Ext.define('Usuario', { nome: '', senha: '', }); });

Page 60: ExtJS-4

Eduardo Mendes ([email protected])60

Config

Ext.define('Usuario', { config: { nome: '', senha: ‘', } });

getNome setNome resetNome

getSenha setSenha resetSenha

Page 61: ExtJS-4

Eduardo Mendes ([email protected])

MessageBoxalert, confirm, prompt

61

Page 62: ExtJS-4

Eduardo Mendes ([email protected])62

Botão e MessageBox

Page 63: ExtJS-4

Eduardo Mendes ([email protected])63

Acionando um MessageBox a partir do botão

Ext.onReady(function() { Ext.create('Ext.Button', { text: 'Saudar a Turma', renderTo: 'botao-saudar', handler: function() { Ext.MessageBox.alert('Saudacao','Ola, Turma!'); } }); });

informa em o id do elemento onde será renderizado

informa a ação que será realizada ao clicar no botão

<p id="botao-saudar"></p>

Page 64: ExtJS-4

Eduardo Mendes ([email protected])

Saudar Turma

64

Page 65: ExtJS-4

Eduardo Mendes ([email protected])65

MessageBox + CallbackO 3.º parâmetro é um callback que é executado quando o botão OK é chamado

Ext.onReady(function() { Ext.create('Ext.Button', { text: 'Saudar a Turma', renderTo: 'botao-saudar', handler: function() { Ext.MessageBox.alert('Saudacao','Ola, Turma!'); } }); });

Page 66: ExtJS-4

Eduardo Mendes ([email protected])66

MessageBox + CallbackO 3.º parâmetro é um callback que é executado quando o botão OK é chamado

Ext.onReady(function() { Ext.create('Ext.Button', { text: 'Saudar a Turma', renderTo: 'botao-saudar', handler: function() { Ext.MessageBox.alert('Saudacao','Ola, Turma!’, function() { console.log("A turma foi saudada"); } ); } }); });

Page 67: ExtJS-4

Eduardo Mendes ([email protected])

Callback

67

Page 68: ExtJS-4

Eduardo Mendes ([email protected])68

MessageBox + confirmA mensagem de confirmação

Ext.create('Ext.Button', { text: 'Confirmar Aula', renderTo: 'botao-confirmar', handler: function() { Ext.MessageBox.confirm( ‘Confirmacao', 'Confirmar a aula?’, function(btn) { console.log("A aula foi confirmada? R: " + btn); } ); } });

Page 69: ExtJS-4

Eduardo Mendes ([email protected])

Confirmação

69

Page 70: ExtJS-4

Eduardo Mendes ([email protected])70

MessageBoxA mensagem de confirmacao

Ext.create('Ext.Button', { text: 'Confirmar Aula', renderTo: 'botao-confirmar', handler: function() { Ext.MessageBox.confirm( ‘Confirmacao', 'Confirmar a aula?’, function(btn) { console.log("A aula foi confirmada? R: " + btn); } ); } });

Page 71: ExtJS-4

Eduardo Mendes ([email protected])71

MessageBox + confirm + acao!

Ext.MessageBox.confirm( ‘Confirmacao', 'Confirmar a aula?’, function(btn) { console.log("A aula foi confirmada? R: " + btn); if (btn == "yes") { Ext.MessageBox.alert('Confirmada','Ola, …’); } } );

Page 72: ExtJS-4

Eduardo Mendes ([email protected])

Alerta da aula

72

Page 73: ExtJS-4

Eduardo Mendes ([email protected])73

MessageBox + PromptO botão de prompt

Ext.create('Ext.Button', { text: 'Prompt', renderTo: 'botao-prompt', handler: function() { Ext.MessageBox.prompt( 'Prompt', 'Qual o horario da aula?', function(btn, text) { console.log("O horario da aula eh: " + text); } ); } });

Page 74: ExtJS-4

Eduardo Mendes ([email protected])

Prompt

74

Page 75: ExtJS-4

Eduardo Mendes ([email protected])75

MessageBox + Prompt + multilineO botão de prompt

Ext.create('Ext.Button', { text: 'Prompt', renderTo: 'botao-prompt', handler: function() { Ext.MessageBox.prompt( 'Prompt', 'Qual o horario da aula?', function(btn, text) { console.log("O horario da aula eh: " + text); } ); } });

Page 76: ExtJS-4

Eduardo Mendes ([email protected])76

MessageBox + Prompt + multilineO botão de prompt

Ext.create('Ext.Button', { text: 'Prompt-area', renderTo: 'botao-prompt-area', handler: function() { Ext.MessageBox.prompt( 'Prompt', ‘Qual sera o conteudo da aula?', function(btn, text) { console.log("O conteudo da aula eh: " + text); }, this, true ); } });

Page 77: ExtJS-4

Eduardo Mendes ([email protected])

Conteudo da Aula

77

Page 78: ExtJS-4

Eduardo Mendes ([email protected])

Panel

78

Page 79: ExtJS-4

Eduardo Mendes ([email protected])79

PanelVárias classes no ExtJS são subclasses de Panel como: !

Menu !

Form !

Grid !

Window

Page 80: ExtJS-4

Eduardo Mendes ([email protected])80

Panel

Page 81: ExtJS-4

Eduardo Mendes ([email protected])

Configurações

81

html items buttons dockedItems layout tools title bars

Page 82: ExtJS-4

Eduardo Mendes ([email protected])82

PanelCódigo básico

Ext.onReady(function() { Ext.create('Ext.panel.Panel', { title: 'Ola', width: 200, html: '<p>Turma!</p>', renderTo: Ext.getBody() }); });

Page 83: ExtJS-4

Eduardo Mendes ([email protected])83

PanelCódigo básico

Ext.onReady(function() { Ext.create('Ext.panel.Panel', { title: 'Ola', width: 200, height: 300, html: '<p>Turma!</p>', renderTo: Ext.getBody() }); });

Page 84: ExtJS-4

Eduardo Mendes ([email protected])

Configurações

84

html items buttons dockedItems layout tools title bars

Page 85: ExtJS-4

Eduardo Mendes ([email protected])85

Panel + items

Ext.onReady(function() { Ext.create('Ext.panel.Panel', { bodyPadding: 20, width: 300, title: 'Filters', items: [{ xtype: 'datefield', fieldLabel: 'Data inicial' }, { xtype: 'datefield', fieldLabel: 'Data final' }], renderTo: Ext.getBody() }); });

Page 86: ExtJS-4

Eduardo Mendes ([email protected])86

Panel + items + grid

Ext.onReady(function() { Ext.create('Ext.panel.Panel', { bodyPadding: 20, width: 300, title: 'Filters', items: [{ xtype: 'datefield', fieldLabel: 'Data inicial' }, { xtype: 'datefield', fieldLabel: 'Data final' }], renderTo: Ext.getBody() }); });

Page 87: ExtJS-4

Eduardo Mendes ([email protected])

Configurações

87

html items buttons dockedItems layout tools title bars

Page 88: ExtJS-4

Eduardo Mendes ([email protected])88

Panel + dockedItems Ext.create('Ext.panel.Panel', { bodyPadding: 20, title: 'Filters', width: 300, items: [{ xtype: 'datefield', fieldLabel: 'Data inicial' }, { xtype: 'datefield', fieldLabel: 'Data final' }], dockedItems: [{ xtype: 'toolbar', dock: 'bottom', items: [{ text: 'Encaixado na base' }] }], renderTo: Ext.getBody() });