ext gwt 3.0 data widgets

30

Upload: sencha

Post on 07-Nov-2014

4.072 views

Category:

Technology


3 download

DESCRIPTION

The data widgets in Ext GWT3 have been completely rewritten. Rather than using renderers in 2.x, the new data widgets are GWT Cell-based. In this session you will learn about the changes and how to use the new API.Colin Alworth has been a member of the Ext GWT community for a number of years, and has joined the team to contribute to 3.0’s successful release. With several years of Javascript, GWT, and Ext GWT experience, he brings real-world knowledge and use cases to Sencha’s next generation of GWT tools and components.

TRANSCRIPT

Page 1: Ext GWT 3.0 Data Widgets
Page 2: Ext GWT 3.0 Data Widgets

Colin Alworth, Sencha

DATA WIDGETS

[email protected] @ambisinister

Page 3: Ext GWT 3.0 Data Widgets

Data Widget Design

Page 4: Ext GWT 3.0 Data Widgets

Data

Page 5: Ext GWT 3.0 Data Widgets

Data Widgets Work With

Bean-like POJOsAutoBeansRequestFactory Proxies

Page 6: Ext GWT 3.0 Data Widgets

Reflection?

2.0 uses Map<String,Object>3.0 generates accessors as needed

Page 7: Ext GWT 3.0 Data Widgets

ValueProviders and PropertyAccesspublic interface Person { String getFirstName(); String getLastName(); String getEmail(); String getFavoriteColor(); void setFavoriteColor(String color); int getHeight(); void setHeight(int height);}

Page 8: Ext GWT 3.0 Data Widgets

ValueProvider and PropertyAccess

public interface PersonProperties extends PropertyAccess<Person> { @Path("email") ModelKeyProvider<Person> key(); ValueProvider<Person, String> firstName(); ValueProvider<Person, String> lastName(); ValueProvider<Person, String> email(); ValueProvider<Person, String> favoriteColor(); ValueProvider<Person, Integer> height(); }

...PersonProperties properties = GWT.create(PersonProperties.class);

Page 9: Ext GWT 3.0 Data Widgets

Cell: ‘Widget Lite’

Page 10: Ext GWT 3.0 Data Widgets

CellsLightweight and ReusableEasy to CustomizeMost Components backed by Cells

Page 11: Ext GWT 3.0 Data Widgets

Field CellsGWT AbstractInputCell

AbstractEventInputCell

FieldCell

ValueBaseFieldCell

CheckBoxCell TextInputCell TriggerFieldCell

ComboCell DateCell

Page 12: Ext GWT 3.0 Data Widgets

Using Cells

Page 13: Ext GWT 3.0 Data Widgets

Custom Cell<String>public class MyEmailLinkCell extends AbstractCell<String> { interface Template extends XTemplates { @XTemplate("<a href='mailto:{email}'>{email}</a>") SafeHtml emailTemplate(String email); }

private Template t = GWT.create(Template.class);

@Override public void render(Context context, String value, SafeHtmlBuilder sb) { sb.append(t.emailTemplate(value)); }}

Page 14: Ext GWT 3.0 Data Widgets

ListView<Person, String>

ListView<Person, String> email = new ListView<Person, String>(store, properties.email());

names.setCell(new MyEmailLinkCell());

Page 15: Ext GWT 3.0 Data Widgets

Grid<Person>ColumnConfig<Person, String> firstName = new ColumnConfig<Person,

String>(properties.firstName(), 80, "First Name");

ColumnConfig<Person, String> lastName = new ColumnConfig<Person, String>(properties.lastName(), 80, "Last Name");

lastName.setCell(new TextInputCell());

ColumnConfig<Person, Integer> height = new ColumnConfig<Person, Integer>(properties.height(), 80, "Height");

height.setCell(new NumberCell<Integer>(new IntegerPropertyEditor()));

Page 16: Ext GWT 3.0 Data Widgets
Page 17: Ext GWT 3.0 Data Widgets

Design questions?

Page 18: Ext GWT 3.0 Data Widgets

From Server to Screen

Page 19: Ext GWT 3.0 Data Widgets

Stores

Rewritten from scratchAPI Changes, more consistent with Java CollectionsConstructors require a ModelKeyProvider

Page 20: Ext GWT 3.0 Data Widgets

Loaders, Readers, Proxies (and Writers)

Page 21: Ext GWT 3.0 Data Widgets

Loader DataProxy Server

DataReader

Page 22: Ext GWT 3.0 Data Widgets

Purposes

Loader: Builds requests, sends to DataProxyDataProxy: Makes request to serverDataReader: Translates wire-format to objectsDataWriter: Translates objects to wire-format

Page 23: Ext GWT 3.0 Data Widgets

Readers and AutoBeansAll JSON and XML structures represented using AutoBeans

interface ContactCollection { @PropertyName("records/record") List<Contact> getValues();} interface Contact { @PropertyName("Name") String getName();

@PropertyName("Email") String getEmail();

@PropertyName("Phone") String getPhone();}

<?xml version="1.0" encoding="ISO-8859-1"?><records> <record> <Name>Middleton, Wendy V.</Name> <Email>[email protected]</Email> <Phone>5574291911</Phone> </record> <record> <Name>Stark, Olivia P.</Name> <Email>[email protected]</Email> <Phone>1666312154</Phone> </record> <record> <Name>Shannon, Rhea D.</Name> <Email>[email protected]</Email> <Phone>2413489010</Phone> </record>

Page 24: Ext GWT 3.0 Data Widgets

Genericsprivate Loader<String, List<Person>> getPersonLoader() {

JsonReader<List<Person>, JsonResults> reader = new JsonReader<List<Person>, JsonResults>(abf, JsonResults.class) { @Override protected List<Person> createReturnData(Object loadConfig, JsonResults records){ return records.getPeople(); } };

RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, "/people.json"); HttpProxy<String> proxy = new HttpProxy<String>(rb); return new Loader<String, List<Person>>(proxy, reader);}

Page 25: Ext GWT 3.0 Data Widgets

Store contents can be efficiently replaced

without Loader

Page 26: Ext GWT 3.0 Data Widgets

Data Questions?

Page 27: Ext GWT 3.0 Data Widgets

Customization

Page 28: Ext GWT 3.0 Data Widgets

Rendering?

ValueProvider instanceWith custom pathWith LabelProviderConfigured CellCustom Cell

Page 29: Ext GWT 3.0 Data Widgets

Extra Behavior?

Event HandlersSubclass GridView/TreeViewCustom Cell

Page 30: Ext GWT 3.0 Data Widgets

Questions?