ext get id js_【翻译】Ext JS最新技巧——2015-8-11

Seth Lemmons:使用棒极了的Awesome Font

Ext JS 6附带了一个新的海卫一主题,可以使用Font Awesome字体作为背景图像的图标。不过,你知道如何通过“iconCls”和“glyph”来使用哪些相同的图标(以及更多来自于广泛的Font Awesome库)吗?

使用海卫一主题的时候

可以在诸如Ext.panel.Panel、Ext.menu.Item、Ext.button.Button等等组件中使用iconCls来设置Font Awesome字体为图标,语法如下:

// use ‘x-fa’ to add set the font family to Font Awesome

// then use “fa-{iconName}” to set the icon itself

iconCls: ‘x-fa fa-star’ // the icon will be the Star icon from Font Awesome

对于组件的“glyph”配置项,语法如下:

glyph: ‘xf005@FontAwesome’ // using the unicode “f0005” for Star

所有的Font Awesome图标都可以在Font Awesome网站内找到。

注意:“glyph”和“iconCls”配置项是互斥的。“glyph”配置项是在Ext JS 4.2中加入的,主要是解决EI6或7不支持伪元素这种情况。我们建议使用“iconCls”,而不是“glphy”,原因是Ext JS 5以上版本(只支持IE 8以上版本)所支持的浏览器都已经支持伪元素。最现代的图标字体已经都会有一套CSS规则使用伪元素来将图标应用到元素。

对于Ext.Img组件,可以通过使用autoEl配置项来封装元素,兵使用cls或glyph来实现:

Ext.create({

xtype:'image',

autoEl: 'div',

cls: 'x-fa fa-star',

//glyph: 'xf005@FontAwesome',

alt: 'star',

style: {

fontSize: '36px',

lineHeight: '36px'},

height: 36,

width: 36

});

注意:对于Image的配置项,需要使用cls来代替iconCls。

不使用海卫一主题的时候

如果不使用海卫一主题,但又想在组件中使用Font Awesome图标,可以在Sencha Cmd创建的应用程序中加入Font Awesome包。要实现这个,编辑“应用程序根目录/app.json”文件,在requires数组内加入以下代码:

"requires": [

"font-awesome"

],

这样就可以像使用海卫一主题那样直接在组件中使用iconCls配置项了。

Pictos图标

还可以在app.json文件中通过请求Picto来使用Picto图标集:

"requires": [

"font-pictos"

],

请求后,就可以使用以下iconCls语法来使用Picto库的图标了:

// pictos-{iconName} is used to set a named icon from the Pictos icon set

iconCls: 'pictos pictos-home'

要了解Picto图标的对应信息,可以查看Sencha字体包指南。

查看主题指南可以了解更多有关海卫一主题以及字体图标的信息。

Joel Watson:保存关联数据的另一选项

在Ext JS 5应用程序中使用关联的时候,有许多方式可以用来保存关联的数据。无论是喜欢保存每一个单独的个体模型实例、创建一个自定义的Ext.data.writer.Writer实现,还是使用Ext.data.Session来创建批处理,Ext JS都提供了极大的灵活性以便你以最适合你的应用程序的的方式处理数据。

不过,在Ext JS 5中, Ext.data.writer.Writer有几个新的特性为你提供了一种新选择:allDataOptions和partialDataOptions。

这些配置项允许你在模型数据将要被发送到服务器时,去定义传递给Ext.data.Model的getData方法的选项。allDataOptions用于phantom(新)记录(或在writeAllFields为true的时候),而partialDataOptions则用于其他方面(或writeAllFields为false的时候)。

这样对关联数据有什么好处呢?

下面来看两个实体,User和Address:

Ext.define('User', {

extend: 'Ext.data.Model',

fields: ['firstName', 'lastName', 'age', {

name: 'addressId',

reference: 'Address',

unique: true

}],

...

});

Ext.define('Address', {

extend: 'Ext.data.Model',

fields: ['street', 'city', 'state', 'postalCode']

});

在示例中,User与Address具有一对一关联,因而在保存User的时候(无论是创建一个新用户还是保存已修改过的已有用户),同样需要在同一请求中发送任何关联的Address数据。

在Ext JS 4,处理这一情况需要通过创建自定义的Ext.data.writer.Writer来扩展getRecordData方法以调用Ext.data.Model.getAssociatedData并添加关联数据到请求数据中。虽然该方式在Ext JS 5中也能很好的工作,但可以利用allDataOptions和partialDataOptions来完成相同的事情,不过需要保存几行代码:

Ext.define('User', {

extend: 'Ext.data.Model',

fields: [...],

proxy: {

type: 'ajax',

url: 'user.json’,

writer: {

type: 'json',

allDataOptions: {

persist: true,

associated: true

},

partialDataOptions: {

changes: false,

critical: true,

associated: true

}

}

}

});

在allDataOptions配置项,指定了新建的User模型数据在发送到服务器前的预处理方式:

persist: true ->只发送持续性字段(该属性默认值为true)。

associated: true ->包含关联数据

对于partialDataOptions,原理是一样的,用来指定已存在的用户模型数据发送到服务器前的预处理方式:

changes: true -> 只包含修改过的字段(默认)

critical: true -> 始终包含“关键”字段,而不管是否已被更改(默认)

associated: true -> 包含关联数据

当然,可以根据应用程序的需要调整这些配置项。不过,问题的关键是,在应用程序内创建或更新用户时,发送到服务器的请求将包含任何关联的数据,这太棒了。

有关详细信息,请查看Fiddle中User和Address模型的创建和更新示例。

Joel Watson:在Ext JS 5中使用模型的Ids

在Ext JS 5,一个相当大的变化是id的生成。在Ext JS 4,默认的id的生成器不会根据idProperty自动去生成值,例如,简单的用户模型示例:

Ext.define('Fiddle.model.User', {

extend: 'Ext.data.Model',

fields: ['firstName', 'lastName', 'age'],

proxy: {

type: 'rest',

url: 'user.json'

}

});

// create a new User

var user = new Fiddle.model.User({

firstName: 'John',

lastName: 'Doe',

age: 52

});

user.save();

在调用save发送请求到服务器的时候,会看到如下请求:

{

age:52,

firstName: "John",

lastName: "Doe"}

然而,在Ext JS 5,如果未提供id值,默认的id生成器会根据idProperty生成一个值,对于以上示例代码,处理结果会不同:

{

id:"User-1",

age: 52,

firstName: "John",

lastName: "Doe"}

要注意,id(idProperty的默认值)现在被包含在请求中。在某些情况下,开发人员可能会在服务器端代码中依赖Ext JS 4的行为来确定如何处理传入的请求,在这种情况下,在Ext JS 5中的这种改变可能会引起一些冲突。

幸运的是,有许多选项可以用来处理(或左右)这种改变。

ID生成器

第一个选项(并且可能是最好的一个)是使用Ext JS中的id生成器,例如,使用Ext.data.identifier.Negative,该id生成器会产生连续的、值为负数的客户端id值。在大多数的服务器端,id值是基于整数并是顺序增加的,而由Ext.data.identifier.Negative产生的临时id值,则很容易辨析,这样,服务器代码就可以很轻松的确定这是新的还是已有的Ext JS模型数据。

以上使用负数标识符的示例的处理结果可能会像以下代码:

{

id:-1,

age: 52,

firstName: "John",

lastName: "Doe"}

当然,如果这个都不能满足你的需求,你可以通过扩展Ext.data.identifier.Generator来创建自己的生成器。

clientIdProperty

如果使用id生成器不符合应用程序的需求,另一个选择就是使用已被添加到Ext.data.writer.Writer的clientIdProperty配置项。使用该配置项,就可以在创建一个新记录并发送数据到服务器时指定一个名字作为idProperty值的关键字:

Ext.define('User', {

extend: 'Ext.data.Model',

fields: ['firstName', 'lastName', 'age'],

proxy: {

type: 'rest',

url: 'user.json',

writer: {

type: 'json',

clientIdProperty: 'userId'

}

}

})

在保存用户实例的时候,发送到服务器的数据会类似以下代码:

{

"userId": "User-1",

"firstName": "John",

"lastName": "Doe",

"age": 52}

对于现有的服务器代码依赖于id来标识新记录的方式,该方式可保持现状,不需要修改逻辑。

transform()

最后一个选择是在代理的writer中指定一个自定义的transform方法。transform方法需要两个参数“data”和“request”,并预期要返回发送到服务器的数据对象:

writer: {

type: 'json',

transform: function(data, request) {

// do any data transformations here

// ...

// return the data object that should be sent to server

return data;

}

}

使用transform,可以在发送请求之前做任何所需的数据处理(例如,移除id属性)。这三个选项,为发送到服务器的数据内容提供了最大的控制。不过,这会增加数据错误的风险,因而,使用需谨慎。

有关Ext JS 5中数据模型的改变和改进的更多信息,请参阅Ext JS升级指南。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/429876.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转载】linux进程及进程控制

Linux进程控制 程序是一组可执行的静态指令集,而进程(process)是一个执行中的程序实例。利用分时技术,在Linux操作系统上同时可以运行多个进程。分时技术的基本原理是把CPU的运行时间划分成一个个规定长度的时间片,让每个进程在一个时间片内运…

区分大小屏幕_VESA持续推动DisplayHDR认证计划,你的屏幕属于何种等级吗?

美国视频电子标准协会(VESA)今年可说是动作频频,年初先发布了专为OLED与其他自发光显示器所制订的DisplayHDR True Black高动态范围标准,下半年则更新DisplayHDR兼容测试规范至1.1版,并发布新的DisplayHDR 1400性能分级,至于年中所…

WdatePicker显示乱码

1.修改zh-cn.js内容: var $lang{ errAlertMsg: "不合法的日期格式或者日期超出限定范围,需要撤销吗?", aWeekStr: ["周","日","一","二","三","四","五","六"],…

cordova 某个页面强制横屏_小白科普:从输入网址到最后浏览器呈现页面内容,中间发生了什么?...

老刘 1前言这篇文章是应网友之邀所写,主要描述一下我们访问网站时, 从输入网址到最后浏览器呈现内容,中间发生了什么。今天的文章主要专注于应用层,我拿了一个很简单的网络结构来讲。假定本机已经获取了IP地址,各种网络…

MySQL中order by中关于NULL值的排序问题

MySQL中order by 排序遇到NULL值的问题 MySQL数据库,在order by排序的时候,如果存在NULL值,那么NULL是最小的,ASC正序排序的话,NULL值是在最前面的。 如果我们想让NULL排在后面,让非NULL的行排在前面该怎么…

vue调用手机相机相册_今天才发现,点一下小米手机相册,能将照片一键制作成电影...

随着国产手机的发展,手机像素越来越高,里面的功能也越来越丰富,手机拍照成了不少人的日常,如果你很爱拍照,手机里有一大堆照片,那么教你用手机自带的相册功能,一键将照片制作成电影,…

bzoj3389:[Usaco2004 Dec]Cleaning Shifts安排值班

思路:可以贪心,也可以最短路。 贪心写法:因为在保证合法的前提下,我们选择的区间一定要右端点尽量靠后才行,于是我们每次就选择一个合法的并且右端点最靠后的区间就好了(如果没有合法的输出-1即可&#xff…

unity 烘焙参数 设置_Unity通用渲染管线(URP)系列(九)——点光源和聚光灯

200篇教程总入口,欢迎收藏:放牛的星星:[教程汇总持续更新]Unity从入门到入坟——收藏这一篇就够了​zhuanlan.zhihu.com本文重点内容:1、支持更多类型的灯光2、包含实时的点光源和聚光灯3、为点光源和聚光灯烘焙阴影4、每个物体限…

c#日期转换周几_Java时间与日期

只有把眼前的事情做好,才能考虑其他的问题。众所周知,全世界在同一时刻看手表肯定不会看到同一个时间,因为地球是圆的,面对太阳的角度是不一样的,我们一般说时间几点几点,是指的本地时间,比如国…

Python开发之--前端 HTML基础

一:HTML介绍 HTML:超文本标记语言,标准通用标记语言下的一个应用。包括“头”部分(英语:Head)、和“主体”部分(英语:Body),其中“头”部提供关于网页的信息&…

给与用户建立dblink的权限_网络安全 之 NTFS安全权限

NTFS安全权限一、NTFS权限概述1、通过设置NTFS权限,实现不同的用户访问不同的权限2、分配了正确的访问权限后,用户才能访问其资源3、设置权限防止资源被篡改、删除二、文件系统概述 文件系统即在外部存储设备上组织文件的方法常用的文件系统:…

TCP 连接中的TIME_WAIT

原文:http://blog.csdn.net/wangpengqi/article/details/17245349 这就有个细节,一次http请求,谁会先断开TCP连接?什么情况下客户端先断,什么情况下服务端先断? 百度后,找到原因,主要…

丁丁打折网卷能用吗_微信群控还能用吗?现在什么群控还能使用吗?

微信群控系统还能用吗?为什么现在微信群控系统越来越被限制了呢?其实,微信群控我想在生活中占据着很大的位置!因为微信这么多的使用,现在微信使用人数都是几十亿了,所以很多人看重微信群控系统的市场&#…

错题整理

1.JAVA语言的下面几种数组复制方法中,哪个效率最高? A for循环逐一复制 B System.arraycopy C System.copyof D 使用clone方法 答案:B A、for循环的话,很灵活,但是代码不够简洁. for循环为什么慢,java中所…

xpath中两个冒号_爬虫学习(5)—XPath

之前我们写了一个简单的爬虫,在提取页面信息时我们使用正则表达式来匹配内容,但是正则表达式的书写比较繁琐,而且一旦错误就可能导致匹配失败。对于网页的节点来说,它可以定义id,class或其他的属性,而且节点…

Linux压缩与解压常用命令

欢迎和大家交流技术相关问题: 邮箱: jiangxinnju163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://github.com/jiangxincode 知乎地址: https://www.zhihu.com/people/jiangxinnju tar的相关参数-c: 建立压缩档案-x:解压-t&…

mysql 预留一个自定义字段_MySQL 按指定字段自定义列表排序 | DevOps

问题描述大家都知道, MySQL 中按某字段升序排列的 SQL 为 (以 id 为例, 下同):SELECT * FROM MyTableWHERE id IN (1, 7, 3, 5)ORDER BY id ASC降序排列的 SQL 为:SELECT * FROM MyTableWHERE id IN (1, 7, 3, 5)ORDER BY id DESC有时以上排序并不能满足我们的需求. 例如, 我们…

canny算法的实现(android加载图片,数组写入文件换行)

Canny边缘检测首先要对图像进行高斯去噪,前面讲到了高斯去噪处理,这里从对图像灰度进行微分运算讲起吧。微分运算常用的方法是利用模板算子,把模板中心对应到图像的每一个像素位置,然后按照模板对应的公式对中心像素和它周围的像素…

python程序中想使用正则表达式_python中正则表达式的使用方法

本文主要关于python的正则表达式的符号与方法。findall: 找寻所有匹配,返回所有组合的列表search: 找寻第一个匹配并返回sub: 替换符合规律的内容,并返回替换后的内容.:匹配除了换行符以外的任意字符a xy123b re.findall(x...,a)print(b)# …

jQ实现JSON.stringify(obj)方法

jQstringify是使用jQuery实现的JSON.stringify(obj)方法代码如下&#xff1a;<script type"text/javascript" src"http://keleyi.com/keleyi/pmedia/jquery/jquery-1.10.2.min.js"></script>function jQstringify( obj ) {var arr [];$.each(…