`
xiaozhi7616
  • 浏览: 195989 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Ext学习笔记01 - NameSpace,类实例属性,类实例方法,类静态方法

    博客分类:
  • Ext
阅读更多

从今天起开始学习ExtJs,在这里记录一些学习笔记,方便日后查看,有兴趣的朋友欢迎共同探讨,也请老鸟们多多指教,如果我的理解有什么不正确的地方,也请大家帮助也改正,帮我指出一条明路,先在这里谢过了。

 

学习过程是看DojoChina的陈治文老师讲解的视频(感谢陈治文老师的辛勤工作,这里先赞一下),不是自己原创,边学习边做笔记,不能算是剽窃吧,朋友们别骂我不厚道。

 

 

先把文档放在手边,Ext在线文档:http://extjs.com/deploy/dev/docs/

 

---------------------------------------------------------------------------------------------------------------------------------

 

Here we go....

NameSpace

 

HTML文件中引入基本的三个Ext文件:

<link type="text/css" rel="stylesheet" href="ext/resources/css/ext-all.css">
<script type="text/javascript" src="ext/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="ext/ext-all.js"></script>

 

这点和Dojo一样,Dojo中也是需要引用一个统一的风格的样式(Dojo中有两个常用的themes,soria和tundra),不知道Ext中是不是也提供多样的UI显示主题,简单看了一下resources/css目录下面似乎没有像Dojo一样分层明确的themes,应该是采用其他的方式来实现的。

 

另外引入两个Ext基本的JS,Ext基本功能的封装。

 

把定义NameSpace的JS写到一个单独的js文件中 

/* 定义命名空间 */
Ext.namespace("com.meizhi");

/**
 * 定义一个类
 * 写法相当于com.meizhi.HelloWorld = new function() {};
 */
com.meizhi.HelloWorld = Ext.emptyFn;

 

然后就可以在通过new来创建HelloWorld类的一个实例

<script type="text/javascript">
	new com.meizhi.HelloWorld();
</script>

 

OK,类的实例创建成功,当然,运行起来会没有任何反应,因为我们在类的定义中只给出了一个空的function。

 

看Ext是怎样实现NameSpace的,看源代码中的Ext.js

namespace : function(){
        var a=arguments, o=null, i, j, d, rt;
        for (i=0; i<a.length; ++i) {
            d=a[i].split(".");
            rt = d[0];
            eval('if (typeof ' + rt + ' == "undefined"){' + rt + ' = {};} o = ' + rt + ';');
            for (j=1; j<d.length; ++j) {
                o[d[j]]=o[d[j]] || {};
                o=o[d[j]];
            }
        }
    },

	...............

    Ext.ns = Ext.namespace;

	...............

Ext.ns("Ext", "Ext.util", "Ext.grid", "Ext.dd", "Ext.tree", "Ext.data",
                "Ext.form", "Ext.menu", "Ext.state", "Ext.lib", "Ext.layout", "Ext.app", "Ext.ux");

通过arguments得到namespace方法的参数,然后用点号分割成数组,再依次把空对象递归赋值进去,这样Ext实现NameSpace的过程,而用点号进行连接,实际上就是对象的嵌套。

 

 

程序通过命名空间可以具有很好的组织形式,在java中命名空间的形式是通过package来实现的,Ext命名空间实际上是使用JavaScript的对象和对象属性级联来模拟的,和java的命名空间实现方式是不同的。将Ext的NameSpace用java的package来理解就容易多了。

 

 

命名空间别名

举例:

Mz = com.meizhi;

 

要求首字母必须大写,其他字母小写。

 

实际上就是通常命名空间是一个比较长的字符串,用一个缩写来代替。

Ext.namespace("com.meizhi");

//命名空间别名
Mz = com.meizhi;

Mz.HelloWorld = Ext.emptyFn;

 

 

 类别名

举例

HW = com.meizhi.HelloWorld

 

要求别名全部大写,用来区别NameSpace的别名。

 

别名用的情况不是很多,在读别人的代码的时候能够看明白是怎么回事就好了。

 

类实例属性

“类实例”感觉怪怪的,还是按照java中的概念来理解一下,java中类的一个实例,其实就是一个对象,java是面向对象的语言,Ext是用JavaScript实现的面向对象(这样的说法不是很严谨,意会一下),那么这里的“类实例”其实就是我们通常所说的“对象”。

 

那么“类实例属性”,其实也就是对象的属性。

 

来看一下类实例属性的创建:

Ext.namespace("com.meizhi");

com.meizhi.Person = Ext.emptyFn;

Ext.apply(com.meizhi.Person.prototype,{
	name:"meizhi



",
	sex:"男"
});

 

prototype 是JavaScript中的函数原型,apply 方法是JavaScript中提供的对象绑定的方法(JavaScript中常用的对象绑定方法有两种:apply和call),Ext.apply是对JavaScript提供的apply方法进行了一层封装,方便使用,如果不了解的朋友可以先自己查一下相关的资料(参考:http://virgos.iteye.com/blog/222199 ),这里不做赘述。

 

来看一下调用:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>NameSpace</title>
<link type="text/css" rel="stylesheet" href="ext/resources/css/ext-all.css">
<script type="text/javascript" src="ext/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="ext/ext-all.js"></script>

<script type="text/javascript" src="js/helloworld.js"></script>
<script type="text/javascript">
	var _person = new com.meizhi.Person();
	alert(_person.name);
	_person.name = "陈治文";
	alert(_person.name);
</script>
</head>
<body>

</body>
</html>

 

结果:当进入页面的时候,会弹出对话框,内容是meizhi ”,点击确定以后又弹出对话框,内容是“陈治文”。这是因为在创建类Person的时候,创建了name属性,并赋给它一个默认值“ meizhi ”, 在调用的时候我们更改了_person对象的name属性,并赋值“陈治文”,这样两次alert的结果就不相同了。

 

这里给对象属性赋值操作体现了JavaScript的特性,在Java中我们如果在给对象属性取值和赋值的时候,都是会用到getters和setters方法(每个POJO中都会有一大堆的属性,然后用eclipse自动生成一大堆的getters和setters方法),而JavaScript的处理方式更加灵活,当然,这两种方式各有利弊,需要在其中找到一个平衡点。

 

 

类实例方法

理解了Ext的类实例属性,那么类实例方法就好理解了,就是类里面的一个方法。

 

Ext.namespace("com.meizhi");

com.meizhi.Person = Ext.emptyFn;

Ext.apply(com.meizhi.Person.prototype,{
		name:"",
		sex:"",
		print:function(){
			alert(String.format("姓名:{0},性别:{1}",this.name,this.sex));
		}
	});

 

"String.format"是Ext封装的一个字符串处理方法,在Ext中有很多类似的工具方法(这一点Dojo中也是这样做的,似乎框架中都会封装一些常用的工具方法,方便使用)。

 

"String.format"方法中的参数格式,写法很方便,不用做繁琐的字段拼接。

 

上面代码中Person类中定义了两个类实例属性name和sex,并且它们的默认值为空,在构造Person对象实例的时候可以为它们进行赋值操作。提供了一个类实例方法,将属性输出。

 

现在的代码就有点儿像java中的类了,呵呵

 

来看调用:

<script type="text/javascript">
	var person = new com.meizhi.Person();
	
	//设置属性
	person.name = "meizhi



";
	person.sex = "男";
	
	//调用方法
	person.print();
	
	//为该对象再次设置属性
	person.name = "Katrana";
	person.sex = "女";
	
	person.print();
</script>

 

 

可以看到弹出对话框中显示:“姓名:meizhi ,性别:男”和“姓名:Katrana,性别:女”,是经过格式化以后的文本输出样式,也就是类实例方法中定义的样式,从这里也可以看到Ext封装的"String.format"方法的使用效果。

 

 

类静态方法

定义:在一个类级别上的共享方法。

 

来看定义

Ext.namespace("com.meizhi");

com.meizhi.Person = Ext.emptyFn;

//这里定义的 print方法 是 类实例方法
Ext.apply(com.meizhi.Person.prototype,{
		name:"",
		sex:"",
		print:function(){
			alert(String.format("姓名:{0},性别:{1}",this.name,this.sex));
		}
	});

//这里定义的 print方法 是 类静态方法
com.meizhi.Person.print = function(_name, _sex){
	var _person = new com.meizhi.Person();
	_person.name = _name;
	_person.sex = _sex;
	_person.print();
}

 

对照Java代码来看一下,理解的更快一些:

Person.print(String name, String sex) {
	Person person = new Person();
	person.setName(name);
	person.setSex(sex);
	person.print();
}

 

 

调用

<script type="text/javascript">
	new com.meizhi.Person.print("meizhi","男");
	new com.meizhi.Person.print("katrana","女");
</script>

 

 

调用的过程是 new com.meizhi.Person.print(name, sex),而不是先new com.meizhi.Person(),在调用它的print()方法。构造对象的过程是在静态方法内部完成的,这里需要好好的体会一下。

 

 结果和上面的例子是一样的。

 

 两点多了,睡觉了,明天还要上班,今天先到这儿吧。

 

 

 

Ext学习笔记01 - NameSpace,类实例属性,类实例方法,类静态方法

Ext学习笔记02 - 构造方法,类继承,类实例方法重写

Ext学习笔记03 - 事件

Ext学习笔记04 - UI组件 - Component, Button

Ext学习笔记05 - UI组件 - Panel,TextField

Ext学习笔记06 - Window

Ext学习笔记07 - Window及Window中的布局

Ext学习笔记08 - 日期控件

Ext学习笔记09 - ComboBox

 

 

 

 

分享到:
评论

相关推荐

    EXT学习笔记-项目应用实践

    这篇EXT学习笔记主要涵盖了EXTJS中面向对象编程的一些关键概念和实践,包括命名空间、类定义、构造函数、属性与方法的访问控制(私有和公有)、静态属性与方法以及继承机制。 1. **命名空间**:在EXTJS中,命名空间...

    3------通过实例学习------Ext.js------.pdf

    8. **bootstrap.js**:Ext.js的库引导文件,可以根据参数自动选择加载`ext-all.js`或`ext-all-debug.js`。 9. **ext-all.js**:Ext.js的核心库,用于生产环境。 10. **ext-all-debug.js**:调试版本的核心库,包含...

    3------通过实例学习------Ext.js------.docx

    通过实例学习Ext.js,我们可以深入了解其核心组件、布局管理、数据绑定以及用户界面构建等关键知识点。 首先,让我们看一下解压后的Ext.js文件结构: 1. **builds**:这个目录包含了经过压缩和优化的Ext.js代码,...

    EXT dojochina Ext类静态方法.rar

    EXT dojochina Ext类静态方法是一个关于EXT框架在JavaScript中的使用的主题,主要聚焦于Ext类的静态方法。EXT是一个强大的前端开发框架,由Sencha公司开发,它提供了丰富的组件库,用于构建复杂的Web应用程序。在EXT...

    EXT dojochina Ext类实例属性.rar

    EXT dojochina Ext类实例属性是一个关于EXT框架在JavaScript中的使用的主题,主要涉及EXT库中的类和实例属性。EXT是一个强大的JavaScript库,用于构建富客户端应用程序,它提供了丰富的组件和布局管理,使得Web应用...

    ext 基本知识-store-proxy-reader-ext-connection-实例

    在这个例子中,person是一个PersonRecord类型的实例,包含了姓名和年龄这两个属性。三、Ext.data.StoreExt.data.Store是ExtJS中用于管理数据集的核心组件,它可以加载并存储数据,同时提供对数据的查询、排序、过滤...

    Gwt-ext学习笔记之基础篇

    ### Gwt-ext学习笔记之基础篇 #### 一、安装CypalStudio工具 为了能够开始Gwt-ext的学习之旅,首先需要确保开发环境已经搭建好。CypalStudio是一款非常实用的工具,它能帮助开发者更高效地进行GWT项目的开发。 1....

    Ext API详解--笔记

    这篇笔记将深入探讨Ext Js的核心API,涵盖多个关键模块。 1. **Ext.Element**: `Ext.Element`是Ext Js中的基础元素操作类,它封装了对DOM元素的各种操作,如尺寸调整、样式修改、事件处理等。在`EXT核心API详解...

    (转载)GWT -EXT学习笔记-基础

    3. 在项目的`public`目录下新建`js`文件夹,并将`ext-2.1`目录下的`adapter`、`resources`以及`ext-all.js`、`ext-core.js`文件复制到`js`文件夹下。 **步骤二:修改HTML宿主页面和模块配置文件** 1. 修改`...

    EXT学习札记--京华志

    - 需要先加载`ext-base.js`文件,再加载`ext-all.js`文件,这是因为前者包含了后者运行所需的基础功能。 - 在某些情况下,还需要设置页面的字符集编码,例如`&lt;meta http-equiv="Content-Type" content="text/html;...

    Gwt-ext学习笔记

    这篇学习笔记将深入探讨Gwt-ext的核心概念、功能以及如何在实际项目中应用。 GWT是由Google开发的一个开源框架,它允许开发者使用Java语言来编写前端Web应用。GWT编译器会将Java代码转换为优化过的JavaScript,以...

    Ext实现java的面向对象实例

    4. **类静态方法**:与实例方法不同,静态方法属于类本身,而不是类的实例。它们可以通过类名直接调用,如`Person.sayHello()`。在Ext中,我们使用`statics`配置项定义静态方法。 5. **构造方法**:构造方法是一个...

    Ext学习笔记-个人版.doc

    Ext是一个JavaScript库,主要用于构建富客户端应用程序,尤其是那些基于Web的桌面级应用。它提供了一套完整的组件模型、布局管理、数据绑定以及丰富的用户界面组件,使得开发者能够创建出功能强大的交互式网页应用。...

    ext学习笔记代码

    ext学习笔记代码 ext学习笔记代码 ext学习笔记代码

    Gwt-Ext学习笔记之进级篇

    在深入探讨GWT-Ext之前,我们先了解一下GWT(Google Web Toolkit)和Ext Js的基础。GWT是一个开源的开发工具,允许开发者使用Java语言来编写客户端的Web应用程序,然后将其编译为优化过的JavaScript代码,以实现高...

    bcprov-ext-jdk15on-146.jar

    bcprov-ext-jdk15on-146.jar

    chinese-bert-wwm-ext.rar

    《哈工大版Chinese-BERT-wwm-ext for PyTorch深度解析》 在自然语言处理(NLP)领域,预训练模型已经成为基石,而BERT(Bidirectional Encoder Representations from Transformers)模型更是其中的明星。本文将深入...

Global site tag (gtag.js) - Google Analytics