sencha touch 入门系列 (八)sencha touch类系统讲解(下)
接着上一讲,我们通过一组代码来讲解一下st的类的一些属性:
Ext.define("MyConfig",{
config:{
website:"http://127.0.0.1"
},
speak: function() {
console.log("speak12345");
}
}); Ext.define("Ext.ux.Util",{
alias:"widget.util",//等同xtype:"util"
alternateClassName:"Util",//项目的替代类名, //把类MyConfig并入该类
mixins:{
myConfig:"MyConfig"
}
}); var complete = Ext.create("Ext.ux.Util");
var mine = Ext.create("Util");
var widget = Ext.widget("util");//对应设置的alias别名 mine.speak();//speak12345
console.log(mine);
console.log(mine.config.website);//http://127.0.0.1
console.log(mine.getWebsite());//undefined
如上代码,我定义了两个对象,一个是Myconfig(假定为我的配置文件),一个是Ext.ux.Util(假定为我的工具类)
首先我们先看下第10行开始的工具类定义,跟上一讲有些不同,
我们在类的定义中加入了alias,alternateClassName 和 mixin属性,下面我们来详细讲解下这三个属性
首先是alias,我们一般称之为别名,它的定义方式如下:
alias:“widget.自定义的别名”,官方api中的写法
这个属性的定义等同于 xtype:"自定义的别名",不过这种定义别名的方式一般只会在官方源码中见到,一般xtype只是用来引入组件的
接着我们看看别名的作用,
1.当一个视图组件需要引入子组件的时候,使用alias定义过别名的组件就可以使用xtype:"自定义的别名"来引入,假设我在main视图中引入一个自定义别名为login的组件,那么引入代码如下
Ext.define('CCICloud.view.Main', {
extend: 'Ext.Container',
alias: "widget.main",
config: {
items: [
{
xtype: "login"
}
]
} });
使用xtype引入组件的好处就是延迟创建,只有当该组件需要被渲染显示出来的时候它才会被创建,这样可以有效地控制内存的占用。
2.alias的第二个作用是,
使用别名定义过的组件都可以使用Ext.widget("自定义的别名")来实例化该类,效果等同于Ext.create("类名")
上面定义的util类就可以通过别名来实例化,代码如下
var widget = Ext.widget("util");
接着我们看另一个属性:
alternateClassName 这个属性的作用是给你的类设定一个可替换的类名,如上所示,我们给Ext.ux.Util类还定义了一个
alternateClassName:“Util” 这相当于给我们这个类又定义了一个新的类名Util且跟define的类名是共存的,
这就意味着你可以使用Ext.create("Util")来实例化这个类,当你定义的类名太长时,你可以给它自定义一个或多个替代类名来给自己使用
这个属性很简单,我们就不多讲了
下面是minxins属性
//把类MyConfig并入该类
mixins:{
myConfig:"MyConfig"
}
这个属性的作用是把其他类合并过来,上面的定义把MyConfig类的内容合并到Util中来了,
当我们实例化Util类的时候,我们就可以通过util类来调用MyConfig中的属性跟方法了
var mine = Ext.create("Util");
mine.speak();//MyConfig中的speak()方法,输出speak12345
console.log(mine);//Util对象
console.log(mine.config.website);//输入http://127.0.0.1
上面三个属性介绍完了,不过一般情况下,如果我们要将一个类作为工具类来使用,上面这么写调用起来是十分不方便的,下面我们介绍两种比较特殊的用法,方便我们来调用工具类:
1.静态属性
我们把上面的代码改成如下:
Ext.define("Ext.ux.Util",{
alias:"widget.util",
alternateClassName:"Util", statics: {
myConfig: {
website:"http://127.0.0.1"
},
speak:function() {
console.log("speak");
}
} }); Util.speak();//输出speak
console.log(Util.myConfig.website);//输出http://127.0.0.1
在静态属性中定义的方法和对象都会在该类被定义的时候就会被创建,这样,在调用工具类的时候,你就可以直接使用类名.属性来调用了,不用每次使用都进行一次实例化
2.使用单例的方式创建类,代码如下:
Ext.define("Ext.ux.Util", {
alternateClassName: "Util",
singleton: true, config: {
website: "http://127.0.0.1"
}, speak: function () {
console.log("speak");
}, constructor: function (config) {
this.initConfig(config);
}
}); Util.speak();//输出speak
console.log(Util.getWebsite());//输出http://127.0.0.1
这种方式创建的类不需要你手动去进行实例化,在这个类被定义出来并且配置了
singleton: true
的情况下,这个类会自动被创建出来且只会被创建一次,这时,你就可以直接使用类名用类的操作方式来操作类中的任意属性和方法,
这样类的基本属性跟特殊用法我们就讲完了,接着我们再提下类文件的依赖加载
类文件的依赖加载(延迟加载)
在很多情况下,一个类文件可能还要依赖其他的类文件才能运行,如下代码所示:
Ext.define('Human', {
extend: 'Animal', requires: 'Ext.MessageBox', speak: function() {
Ext.Msg.alert(this.getName(), "Speaks...");
}
});
这里我们的speak方法中调用了Ext的弹窗函数Ext.Msg.alert,
这个方法是定义在Ext.MessageBox.js中的,但是因为sencha-touch.js这个核心代码库中并不包含这个js文件,所以,我们需要在这里引入这个js文件,
这里使用了requires属性定义了我们要引入的js,
requires: 'Ext.MessageBox'
如果是多个js文件,我们可以用数组的方式进行引入,如下:
requires: [
'Ext.MessageBox',
'Ext.field.Password',
'Ext.form.FieldSet',
'Ext.TitleBar'
]
使用requires属性引入的js有个特点,就是只有在引用该js文件的类文件被实例化的时候才会被加载引入,也就是我们所说的延迟加载,
如果该js文件已经被引入了,那么该js文件不会被反复引入,只引入一次,
而且在使用sencha cmd的指令打包压缩项目时,requires的js文件内容会被压缩到app.js中
接下来的课程我们要开始讲解试图组件以及事件的控制等相关内容
sencha touch 入门系列 (八)sencha touch类系统讲解(下)的更多相关文章
- sencha touch 入门系列 (九) sencha touch 布局layout
布局用来描述你应用程序中组件的大小和位置,在sencha touch中,为我们提供了下面几种布局: 1.HBox: HBox及horizontal box布局,我们这里将其称为水平布局,下面是一段演示 ...
- sencha touch 入门系列 (七)sencha touch 类系统讲解(上)
在mvc结构的基础上,sencha touch又使用了sencha公司为extjs4开发出来的类系统,在面向对象的编程语言中,类是对对象的定义,它描述了对象所包含的大量属性和方法. 跟面向对象语言类似 ...
- sencha touch 入门系列 扩展篇之sencha touch 项目打包压缩
经常有新手同学抱怨说sencha touch的项目加载速度为什么这么慢,经常要10秒左右的时间甚至更多, 大家都知道,sencha touch开发的项目中引用了大量的js文件,当我们打开项目时,st的 ...
- 微软云平台windows azure入门系列八课程
微软云平台windows azure入门系列八课程: Windows Azure入门教学系列 (一): 创建第一个WebRole程序与部署 Windows Azure入门教学系列 (二): 创建第一个 ...
- C语言高速入门系列(八)
C语言高速入门系列(八) C语言位运算与文件 本章引言: 在不知不觉中我们的C高速入门系列已经慢慢地接近尾声了,而在这一节中,我们会对 C语言中的位运算和文件进行解析,相信这两章对于一些人来说是陌生的 ...
- Siki_Unity_2-1_API常用方法和类详细讲解(下)
Unity 2-1 API常用方法和类详细讲解(下) 任务101&102:射线检测 射线origin + direction:射线检测:射线是否碰撞到物体 (物体需要有碰撞器),碰撞物体的信息 ...
- sencha touch 入门系列 (二)sencha touch 开发准备
这是本人第一次写博客教程,没什么经验,文笔也不是很好,写这教程一方面为了巩固自己这段时间的学习成果,一方面帮助大家解决问题,欢迎大家多提建议,指出问题.接下来我们就开始我们的sencha touch开 ...
- sencha touch 入门系列 (六)sencha touch运行及代码解析(下)
接着上一讲,通过index.html里development.js对app.json里js资源文件的解析,app.js便被index.html引入了, app.js是整个项目的程序入口,在项目完成时使 ...
- 【JAVA零基础入门系列】Day12 Java类的简单应用
俗话说的好,实践出真知,所以除了理论知识掌握扎实以外,更重要的是要多加操练,这样才能掌握核心科技. 今天我们就用刚学会的类来实践一下,目标便是完成上一篇中的剁手任务. 我们的商品类已经准备好了,代码重 ...
随机推荐
- iOS边练边学--定时任务和HUD
九宫格计算思路 利用控件的索引index计算出控件所在的行号和列号 利用列号计算控件的x值 利用行号计算控件的y值 HUD 其他说法:指示器.遮盖.蒙板 半透明HUD的做法 背景色设置为半透明颜色 定 ...
- Java打印整数的二进制表示(代码与解析)
Java打印整数的二进制表示(代码与解析) int a=-99; for(int i=0;i<32;i++){ int t=(a & 0x80000000>>>i)&g ...
- socket client简单传输数据
1.整数转换为用于TCP传输的二进制 _host = "127.0.0.1" _port = 5678 _address = (_host, _port) s=socket.soc ...
- php 输出带变量字符串(echo 函数的应用)
转自: http://www.cnblogs.com/devcjq/articles/2306150.html 学习PHP从最简单的开始:echo, print<?php$temp = arr ...
- 【Java面试题】6 判断下面代码是否有问题
1. if(username.equals(“zxx”){} 2. int x = 1; return x==1?true:false; 1.一个变量直接调用equals方法会给程序带来安全隐患,直接 ...
- 做游戏长知识------基于行为树与状态机的游戏AI(一)
孙广东 2014.6.30 AI. 我们的第一印象可能是机器人,如今主要说在游戏中的应用. 现代的计算机游戏中已经大量融入了AI元素,平时我们进行游戏时产生的交互都是由AI来完毕的.比方在RPG游戏中 ...
- optimization blocks (csapp chapter 5.1)
p_511 编译器在没有指示下,会做‘ safe optimization',因此有些优化在没有参数的指示下是不会对代码做优化的,故在程序中应该避免某一类代码,因为它们妨碍了编译器做优化. optim ...
- 调用外部 DLL 中的函数(1. 早绑定)
,b,t,);end; end.
- CSS background 之设置图片为背景技巧
首先先来看看background有那些值: 可以按顺序设置如下属性(可点击进入相应的css手册查看使用):background-color 背景颜色background-image 背景图片backg ...
- 移植opencv到pcDuino
OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows和Mac OS操作系统上.它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Pytho ...