ext gwt 3.0 advanced templates

24
Wednesday, November 2, 2011

Upload: sencha

Post on 20-Jan-2015

2.724 views

Category:

Technology


2 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Ext GWT 3.0 Advanced Templates

Wednesday, November 2, 2011

Page 2: Ext GWT 3.0 Advanced Templates

Colin Alworth, Sencha

ADVANCED [email protected] @ambisinister

Wednesday, November 2, 2011

Page 3: Ext GWT 3.0 Advanced Templates

What are Templates?

Wednesday, November 2, 2011

Page 4: Ext GWT 3.0 Advanced Templates

Templates + Data = HTML

Wednesday, November 2, 2011

Page 5: Ext GWT 3.0 Advanced Templates

FeaturesControl statementsConditionsLoopsString formattingBuilt-in and customSimple expressionsJavaScript-like scopingBean path syntax

Wednesday, November 2, 2011

Page 6: Ext GWT 3.0 Advanced Templates

Easier to Write, Better PerformanceGWT: SafeHtmlTemplates2.0: Template and XTemplate3.0: XTemplates methods

Wednesday, November 2, 2011

Page 7: Ext GWT 3.0 Advanced Templates

XTemplates in 2.0private native String getTemplate() /*-{

  var html = [  '<p>Name: {name}</p>',  '<p>Company: {company}</p>',  '<p>Location: {location}</p>',  '<p>Salary: {income:currency}</p>',  '<p>Kids:</p>',  '<tpl for="kids" if="name==\'Darrell Meyer\'">',  '<tpl if="age > 1"><p>{#}. {parent.name}\'s kid - {name} - ', '{bday:date("M/d/yyyy")}</p></tpl>',  '</tpl>'  ];  return html.join("");}-*/;

//...XTemplate tpl = XTemplate.create(getTemplate());  panel.removeAll();  panel.addText(tpl.applyTemplate(Util.getJsObject(person, 3)));panel.layout();

Wednesday, November 2, 2011

Page 8: Ext GWT 3.0 Advanced Templates

XTemplates in 3.0

public interface DataRenderer extends XTemplates {  @XTemplate(source = "template.html")  public SafeHtml renderTemplate(Person data);}

//...panel.clear();panel.add(new HTML(renderer.renderTemplate(person)));panel.forceLayout();

<p>Name: {data.name}</p><p>Company: {data.company}</p><p>Location: {data.location}</p><p>Salary: {data.income:currency}</p><p>Kids:</p><tpl for="data.kids"> <tpl if="age < 100"> <p>{#}. {parent.name}'s kid - {name} - {bday:date("M/d/yyyy")}</p> </tpl></tpl>

Wednesday, November 2, 2011

Page 9: Ext GWT 3.0 Advanced Templates

Multiple Templatespublic interface DataRenderer extends XTemplates {  @XTemplate("<p>Name: {data.name}</p><p>Company: {data.company}</p> <p>Location: {data.location}</p>")  public SafeHtml render(Person data);   @XTemplate(source = "template.html")  public SafeHtml renderTemplate(Person data);}

Wednesday, November 2, 2011

Page 10: Ext GWT 3.0 Advanced Templates

3.0 Compiled TemplatesTemplate compiled to Java with SafeHtmlTemplatesPaths translated to getters, or errorCompiler can optimize Java to JavaScriptReturns SafeHtml objects

Wednesday, November 2, 2011

Page 11: Ext GWT 3.0 Advanced Templates

The XTemplate Language

Wednesday, November 2, 2011

Page 12: Ext GWT 3.0 Advanced Templates

Control Statements<tpl if="condition"> contents</tpl>

<tpl for="collection"> properties of item</tpl>

Wednesday, November 2, 2011

Page 13: Ext GWT 3.0 Advanced Templates

Variable ScopingScoped like JavaScript, not JavaLoops can reuse variable namesIf only one argument to template, no need to name itparent refers to previously scoped object# is a 1-indexed current position in collection

Wednesday, November 2, 2011

Page 14: Ext GWT 3.0 Advanced Templates

public SafeHtml renderTemplate(Person data);

<tpl for="data.kids"> <tpl if="age < 100"> <p>{#}. {parent.name}'s kid - {name} - {bday:date("M/d/yyyy")}</p> </tpl></tpl>

<tpl for="kids"> <tpl if="age < 100"> <p>{#}. {data.name}'s kid - {name} - {bday:date("M/d/yyyy")}</p> </tpl></tpl>

Wednesday, November 2, 2011

Page 15: Ext GWT 3.0 Advanced Templates

Variable ReplacementExpressions wrapped in {} turn into getters

Wednesday, November 2, 2011

Page 16: Ext GWT 3.0 Advanced Templates

Customization

Wednesday, November 2, 2011

Page 17: Ext GWT 3.0 Advanced Templates

String Formatting

Wednesday, November 2, 2011

Page 18: Ext GWT 3.0 Advanced Templates

Standard formats value:datevalue:date(formatString)value:numbervalue:number(formatString)value:scientificvalue:decimalvalue:currencyvalue:percentage

Wednesday, November 2, 2011

Page 19: Ext GWT 3.0 Advanced Templates

Custom Formatters

Wednesday, November 2, 2011

Page 20: Ext GWT 3.0 Advanced Templates

Custom Formatter<div class="{style.thumb}"><img src="{photo.path}" title="{photo.name}"></div><span class="x-editable">{photo.name:shorten(18)}</span>

public class Shorten implements Formatter<String> {  private int length;

  public Shorten(int length) {    this.length = length;  }  @Override  public String format(String data) {    return Format.ellipse(data, length);  }}

Wednesday, November 2, 2011

Page 21: Ext GWT 3.0 Advanced Templates

Custom Formatter@FormatterFactories(@FormatterFactory(factory = ShortenFactory.class, name = "shorten"))interface Renderer extends XTemplates {  @XTemplate(source = "ListViewExample.html")  public SafeHtml renderItem(Photo photo, Style style);}

public class Shorten implements Formatter<String> {  private int length;

  public Shorten(int length) {   this.length = length;  }  @Override  public String format(String data) {    return Format.ellipse(data, length);  }}

public class ShortenFactory {  public static Shorten getFormat(int length) {    return new Shorten(length);  }}

Wednesday, November 2, 2011

Page 22: Ext GWT 3.0 Advanced Templates

Nesting Templatespublic interface Template extends XTemplates { @XTemplate(source = "DivFrame.html") SafeHtml render(DivFrameStyle style, SafeHtml content);}

<div class="{style.contentArea}"> <div class="{style.content}">{content}</div> <div class="{style.topLeft}"></div> <div class="{style.top}"></div> <div class="{style.topRight}"></div> <div class="{style.bottomLeft}"></div> <div class="{style.bottom}"></div> <div class="{style.bottomRight}"></div> <div class="{style.left}"></div> <div class="{style.right}"></div></div>

Wednesday, November 2, 2011

Page 23: Ext GWT 3.0 Advanced Templates

Questions?

Wednesday, November 2, 2011

Page 24: Ext GWT 3.0 Advanced Templates

Thank you!

Wednesday, November 2, 2011