首页 > 其他分享 >GXT之旅:第六章:Templates(2)——XTemplate(1)

GXT之旅:第六章:Templates(2)——XTemplate(1)

时间:2022-12-06 11:06:19浏览次数:45  
标签:Templates firstName lastName age GXT Person template friends XTemplate


XTemplate

XTemplate比Template更为有用,除了拥有Template相同的功能之外,还具有更多有用的功能——提供使用更多的<tpl>标记来满足自己需要的html显示效果。

为了下面例子的引用,首先,定义一个Person的ModalData

public class Person extends BaseModel {
public Person(String firstName,String lastName) {
set("firstName", firstName);
set("lastName", lastName);
}
}


For 功能

  • 首先,让我们深入了解一下上一个例子中我们所使用的for。首先我们先第一个friends的list
List<Person> friends = Arrays.asList(new Person("Fred", "Bloggs"),
new Person("John", "Smith"));
  • <tpl>标签的for操作符,可以迭代friends里面的每一个item,并赋予template。字符“.”说明了,template会加工处理friends里面的每一个item
<tpl for=".">
<p>{firstName} {lastName}</p>
</tpl>
  • 将friends应用了如上的template的时候,template会自动的根据占位符变量名去寻找friends的每一个对象里面的值。运行的结果大致如下:

Fred Bloggs
John Smith

  • 在friends的基础之上,我们再新建一个person对象,用来存储friends
Person person = new Person("Daniel", "Vaughan");
person.set("friends", friends);
  • 现在我们要加工person的内容,并且加工person里面存储的friends内容的话,我们的template的定义应该如下(此时在看看for操作符后面的变化)
<p>{firstName} {lastName}'s friends:</p>
<ul>
<tpl for="friends">
<li>{firstName} {lastName}</li>
</tpl>
</ul>


Daniel Vaughan's friends:

  • Fred Bloggs
  • John Smith


  • 运行结果如上。
  • 习惯上来说,我们一般自定义一个方法,来设置template的string,自然的getTemplate()方法命名跟直观易懂一些。
private String getTemplate() {
StringBuilder sb = new StringBuilder();
sb.append("<p>{firstName} {lastName}'s friends</p>");
sb.append("<ul>");
sb.append("<tpl for=\"friends\">");
sb.append("<li>{firstName} {lastName}</li>");
sb.append("</tpl>");
sb.append("</ul>");
return sb.toString();
}
  • template的创建和数据应用如下
XTemplate xTemplate = XTemplate.create(getTemplate());
String html = template.applyTemplate(Util.getJsObject(person, 2));


  • 注意Util.getJsObject方法参数的含义,person是指应用template的属于;2是指person数据挖掘的深度

if 功能

<tpl>标记,同样有if功能的操作符,使用于按条件处理的情况。

  • 让我们在Person ModelData里加入age字段
public class Person extends BaseModel {
public Person(String firstName,String lastName, int age) {
set("firstName", firstName);
set("lastName", lastName);
set("age", age);
}
}
  • 在此Person的结构下,定义一个新的friends list
List<Person> friends = Arrays.asList(new Person("Fred", "Bloggs",
20), new Person("John", "Smith", 40));
Person person = new Person("Daniel", "Vaughan", 30);
person.set("friends", friends);
  • 我们在定义template string的时候,使用if操作符,限定age大于30的friends数据才会被html渲染出来
<p>{firstName} {lastName}'s friends over 30:</p>
<ul>
<tpl for="friends">
<tpl if="age > 30">
<li>{firstName} {lastName}</li>
</tpl>
</tpl>
</ul>
  • 将上面的friends和template应用在一起之后,显示的内容如下

Daniel Vaughan's friends over 30:

  • John Smith


  • 注意,if操作符后面的大于符号使用的是&gt; 下面是一个列表介绍不同的操作符的

比较关系

操作符

说明

等于

==

如果是String类型也支持

大于

>

&gt;

小于

<

&lt;

不等于

!=

 


  • 注意:在<tpl>标记里没有else操作符,如果想实现else的语句跳转,我们可以使用if的相反条件判断。
  • if比较表达式,支持使用ModelData的field。比如之前的比较表达式是年龄大于30,我们可以替换为年龄大于person对象里面age属性的值。我们可以这样定义template
<p>{firstName} {lastName}'s friends over {age}:</p>
<ul>
<tpl for="friends">
<tpl if="age > parent.age">
<li>{firstName} {lastName}</li>
</tpl>
</tpl>
</ul>
  • 注意,firstName不可以命名成first-name。不要使用连字号。

支持简单的数学运算

在Template中,支持简单的数学运算。

比如我们希望age的属性加1,那么可以写成{age+1}。

如果我们希望显示的friends的age要大于person的age的话,我们可以如下定义template

<p>{firstName} {lastName}'s friends over {age}:</p>
<ul>
<tpl for="friends">
<tpl if="age > parent.age">
<li>{firstName} {lastName} ({age}-{parent.age} years older)</li>
</tpl>
</tpl>





标签:Templates,firstName,lastName,age,GXT,Person,template,friends,XTemplate
From: https://blog.51cto.com/u_15903664/5915151

相关文章

  • GXT之旅:第六章:Templates(1)——Template(1)
    第六章:Templates本章我们要了解Templates,以及学习他们是如何方便我们去自定义数据的格式化和显示。我们也会详细了解XTemplates的丰富功能本章,我们会涉及到如下GXt功能集Tem......
  • GXT之旅:第五章:高级Components(6)——TabPanel,Status大概介绍
    TabPanelTabPanel继承Container,作为可以容器,可以负责显示和管理TabItem对象集。TabItem对象集可以方法被add或remove。每一个TabItem都有一个id,用来通过findItem方法来......
  • GXT之旅:第五章:高级Components(2)——Grid的高级应用
    Grid的高级应用之前,我们学习的都是Grid的基本功能。事实上,Grids提供了丰富的功能,下面就让我们了解一下。HeaderGroupConfig假设我们想比较欧洲东部在1950和2000年之间的人......
  • GXT之旅:第五章:高级Components(3)——Paging
    PagingPaging是GXT提供的非常有用的功能。顾名思义,就是分页显示数据,而不是一页显示所有的数据。GXT支持远程和本地的分页:远程分页就是真分页,每次server端返回数据都是数据库......
  • GXT之旅:第七章:MVC——标准的MVC与GXT MVC
    第七章:ModelViewController本章我们要了解GXT的MVC架构,以及学习他们在一个大型的应用系统里是如何系统工作的我们会涉及到如下GXt功能集AppEventEventTypeControllerView......
  • Ext Js中Ext.XTemplate使用方法学习
    1:基本知识    XTemplate是Ext.Template扩展的新类,它支持高级功能的模板类,如自动数组输出、条件判断、子模板、基本数学运行、特殊内建的模板变量,直接执行代码和更多的......
  • TemplateSyntaxError: 'staticfiles' is not a registered tag library. Must be one
    django.template.exceptions.TemplateSyntaxError:'staticfiles'isnotaregisteredtaglibrary.Mustbeoneof:在settings.py中添加:TEMPLATES=[{......
  • Idea Live Templates 代码模板
    我们每天都在写代码,有些代码有结构性的相似,但不是所有的代码都可以被抽成方法。在这种情况下,我们应该考虑使用template的方式加快我们的开发速度。这篇文章会先介绍Intell......
  • 利用TemplatesImpl攻击Shiro
    前言前边已经学习了CC1,CC6,CC3,其中1和3收到JDK8U71限制的的,C6是通杀高版本的,但是通过TemplatesImpl构造的利用链,理论上可以执行任意Java代码,这是一种非常通用的代码执行......
  • 使用templates模版
    Django         2.1.10  'DIRS':[os.path.join(BASE_DIR,'templates')],#修改位置......