sencha touch 入门系列 (八)sencha touch类系统讲解(下)

时间:2022-03-01 07:27:18

  接着上一讲,我们通过一组代码来讲解一下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类系统讲解(下)的更多相关文章

  1. sencha touch 入门系列 (九) sencha touch 布局layout

    布局用来描述你应用程序中组件的大小和位置,在sencha touch中,为我们提供了下面几种布局: 1.HBox: HBox及horizontal box布局,我们这里将其称为水平布局,下面是一段演示 ...

  2. sencha touch 入门系列 (七)sencha touch 类系统讲解(上)

    在mvc结构的基础上,sencha touch又使用了sencha公司为extjs4开发出来的类系统,在面向对象的编程语言中,类是对对象的定义,它描述了对象所包含的大量属性和方法. 跟面向对象语言类似 ...

  3. sencha touch 入门系列 扩展篇之sencha touch 项目打包压缩

    经常有新手同学抱怨说sencha touch的项目加载速度为什么这么慢,经常要10秒左右的时间甚至更多, 大家都知道,sencha touch开发的项目中引用了大量的js文件,当我们打开项目时,st的 ...

  4. 微软云平台windows azure入门系列八课程

    微软云平台windows azure入门系列八课程: Windows Azure入门教学系列 (一): 创建第一个WebRole程序与部署 Windows Azure入门教学系列 (二): 创建第一个 ...

  5. C语言高速入门系列(八)

    C语言高速入门系列(八) C语言位运算与文件 本章引言: 在不知不觉中我们的C高速入门系列已经慢慢地接近尾声了,而在这一节中,我们会对 C语言中的位运算和文件进行解析,相信这两章对于一些人来说是陌生的 ...

  6. Siki_Unity_2-1_API常用方法和类详细讲解(下)

    Unity 2-1 API常用方法和类详细讲解(下) 任务101&102:射线检测 射线origin + direction:射线检测:射线是否碰撞到物体 (物体需要有碰撞器),碰撞物体的信息 ...

  7. sencha touch 入门系列 (二)sencha touch 开发准备

    这是本人第一次写博客教程,没什么经验,文笔也不是很好,写这教程一方面为了巩固自己这段时间的学习成果,一方面帮助大家解决问题,欢迎大家多提建议,指出问题.接下来我们就开始我们的sencha touch开 ...

  8. sencha touch 入门系列 (六)sencha touch运行及代码解析(下)

    接着上一讲,通过index.html里development.js对app.json里js资源文件的解析,app.js便被index.html引入了, app.js是整个项目的程序入口,在项目完成时使 ...

  9. 【JAVA零基础入门系列】Day12 Java类的简单应用

    俗话说的好,实践出真知,所以除了理论知识掌握扎实以外,更重要的是要多加操练,这样才能掌握核心科技. 今天我们就用刚学会的类来实践一下,目标便是完成上一篇中的剁手任务. 我们的商品类已经准备好了,代码重 ...

随机推荐

  1. hdu 2087

    ps:感觉就是字符串处理...好像没什么好讲的...直接上代码 代码: #include "stdio.h" #include "string.h" ]; ]; ...

  2. 第六天:用javascript实现购彩拆分票的计算奖金

    需求如下: 购彩金额  拆分票数  <= 10    1票<= 100    10票<= 200   20票<= 500   50票<= 1000   100票 中奖金额 ...

  3. 【转】Velocity 语法

    一.基本语法 1."#"用来标识Velocity的脚本语句,包括#set.#if .#else.#end.#foreach.#end.#iinclude.#parse.#macro ...

  4. OpenCV码源笔记——RandomTrees &lpar;二&rpar;&lpar;Forest&rpar;

    源码细节: ● 训练函数 bool CvRTrees::train( const CvMat* _train_data, int _tflag,                        cons ...

  5. My97DatePicker的calendar&period;js的反混淆

    eval(string)函数 <script> eval(function(p, a, c, k, e, d) { p = 'function p(){console.log(" ...

  6. perl &period;&ast;&quest;和&period;&ast;

    redis01:/root# cat x2.pl my $str="212121a19823a456123"; if ($str =~/.*a(.*)23/){print &quo ...

  7. STL基础知识

    一,STL的组成 1.什么是STL STL(Standard Template Library)标准模板库的简称,是由惠普开发的一系列软件的总称,STL现在是C++的一部分,已经被构建于编译系统之内, ...

  8. 父页面(JSP页面)传参数到子页面(JSP页面)

    父页面(JSP页面)传参数到子页面(JSP页面) 1.父页面传参数到子页面 //JavaScript代码 $.ajax({ type:"POST", uri:"../st ...

  9. Visual Studio 2010 Shortcuts

    Uploaded by ProNotion, updated on 11/28/2013 by jmb Platform: Windows/ English  PDF    Print   Hide ...

  10. 修改sepolicy后编译出现&OpenCurlyQuote;Error while expanding policy’【转】

    本文转载自:https://blog.csdn.net/yin1031468524/article/details/75644874 在系统中添加某个“*.te”后,可能会出现下面的错误: libse ...