`
andy_ghg
  • 浏览: 293119 次
  • 性别: Icon_minigender_1
  • 来自: 扬州
社区版块
存档分类
最新评论

EXTJS组件化(二)----简易的私有和公有

EXT 
阅读更多
    我一直认为,凡是我已经了解的东西,国内必定已经有了一大票人已经熟知.但是我想我还是要继续写下去.

    上一篇文章简单介绍了一下组件化的思想,下面我想写一下EXTJS组件化的共有和私有,上一篇文章中的组件如下:
Ext.namespace("Lesson1.FirstPanel");
/**
 * @author andy_ghg
 * @version 2009年9月24日23:22:09
 * @description 第一个派生类
 * @class Lesson1.FirstPanel
 * @extends Ext.Panel
 */
Lesson1.FirstPanel=Ext.extend(Ext.Panel,{
	frame:true,
	//初始化函数
	initComponent:function(){
		//继承父类的initComponent函数
		Lesson1.FirstPanel.superclass.initComponent.call(this,arguments);
		//为该组件添加了一个FormPanel
		this.formPanel=new Ext.FormPanel({
			defaults:{anchor:"95%",allowBlank:false},
			labelWidth:55,
			defaultType:"textfield",
			items:[{
				fieldLabel:"用户名",
				name:"username"
			},{
				fieldLabel:"密码",
				inputType:"password",
				name:"password"
			}]
		});
		this.add(this.formPanel);
	},
	submitForm:function(){
		alert(this.formPanel);
//		this.formPanel.getForm().submit({
//			url:"",
//			success:function(){},
//			failure:function(){}
//		})
	}
});

    我们可以看到,组件中所有的部件都是通过this.的方式来声明的,这样做有一个好处,我们可以直接通过组件的实例化对象去访问这些组成部分,例如:
//*测试
Ext.onReady(function(){
	var panel=new Lesson1.FirstPanel({
		height:100,
		width:300,
		renderTo:Ext.getBody(),
		title:"组件",
		layout:"fit"
	});
	alert(panel.formPanel);
});
//*/

    这里弹出的是一个Object,说明我们成功访问了组件内部的成员,这样做的好处很多,我们可以通过实例化对象来获取它内部的成员,从而操作它内部的成员.
    但是,我们在很多情况下是不愿意让别人去调用里面的东西的,怎么办?可以使用var关键字来创建组件内部私有的成员,这样,外部就不可以通过实例化对象去访问它们了:
Ext.namespace("Lesson2.FirstPanel");
/**
 * @author andy_ghg
 * @version 2009年9月25日20:30:15
 * @description 私有与公有
 * @class Lesson2.FirstPanel
 * @extends Ext.Panel
 */
Lesson2.FirstPanel = Ext.extend(Ext.Panel,{
	frame : true,
	//初始化函数
	initComponent : function(){
		var privateObj = new Ext.Panel();
		this.publicObj = new Ext.Panel();
	}
});

//*测试
Ext.onReady(function(){
	var panel = new Lesson2.FirstPanel({
		height:100,
		width:300,
		renderTo:Ext.getBody(),
		title:"组件",
		layout:"fit"
	});
	
	alert(panel.privateObj);
	alert(panel.publicObj);
});
//*/

    第一次弹出的是undifined第二次弹出的是Object,其实这个非常容易理解,上面的代码privateObj是作为一个对象存在的,而publicObj则是作为一个Lesson2.FirstPane的成员存在的,自然,publicObj就可以通过实例化对象被访问到,而privateObj由于作用域的不同,自然就无法被外部函数访问到.
    其实这种私有对象的写法没有太大用处,我一般是将函数作为私有来用的,而对象则没有必要私有化:
Ext.namespace("Lesson2.FirstPanel");
/**
 * @author andy_ghg
 * @version 2009年9月24日23:22:09
 * @description 私有与公有
 * @class Lesson2.FirstPanel
 * @extends Ext.Panel
 */
Lesson2.FirstPanel = Ext.extend(Ext.Panel,{
	frame : true,
	//初始化函数
	initComponent : function(){
        Lesson2.FirstPanel.superclass.initComponent.call(this,arguments);
		var hello=function(){
			//我是私有函数,只有内部成员才能访问到
			alert("private");
		}
		this.publicFn=function(){
			//我是共有函数,外部可以通过对象名来调用
			alert("public");
		}
		this.buttons=[{
			text:"调用私有",
			handler:hello
		},{
			text:"调用公有",
			handler:this.publicFn,
			scope:this
		}]
	}
});

    公开的函数可以不必定义在初始化方法里,一般都是定义在初始化方法外面的,就例如上面第一段代码中的submitForm函数一样.

    在使用这种写法的时候要注意一个问题,就是,定义组件内部的成员的时候,是通过this.的方式去定义的,但是如果组件自身就有这个属性就会造成重写,比如下面的代码将不会显示title里的文字:
Ext.namespace("Lesson2.FirstPanel");
/**
 * @author andy_ghg
 * @version 2009年9月24日23:22:09
 * @description 私有与公有
 * @class Lesson2.FirstPanel
 * @extends Ext.Panel
 */
Lesson2.FirstPanel = Ext.extend(Ext.Panel,{
	frame : true,
	//初始化函数
	initComponent : function(){
		Lesson2.FirstPanel.superclass.initComponent.call(this,arguments);
		this.title=null;
	}
});

//*测试
Ext.onReady(function(){
	var panel = new Lesson2.FirstPanel({
		height:100,
		width:300,
		renderTo:Ext.getBody(),
		title:"组件",
		layout:"fit"
	});
	panel.publicFn();
});
//*/

    我们可以看到设置的title没有被展现出来,所以,当我们在新定义一个组件内部成员的时候一定要避免与组件父类里的成员冲突(除非你是刻意要重写),以免造成不必要的麻烦.这里就要考验你对你所继承的父类的认知程度了.
    (未完待续)
分享到:
评论
2 楼 fatter 2013-04-26  
多谢lz,写的太好了
1 楼 guofengcn 2010-08-28  
学习了~~~

相关推荐

    ExtJs常用布局--layout详解实例代码

    ExtJs常用布局--layout详解实例代码: ExtJs常见的布局方式有:border、form、absolute、column、accordion、table、fit、card、anchor 另外,不常见的布局有:tab、vbox、hbox 具体使用方法可见该文件的案例代码。 ...

    extjs-OA extjs-oa

    一个extjs的OA项目 extjs-OA extjs-oaextjs-OA extjs-oa

    ExtJS快速入门--传智播客--蔡世友

    ExtJS快速入门--传智播客--蔡世友

    extjs2----关于extjs 的使用,操作

    描述中提到内容较为初级,适合初学者学习,这表明我们将探讨的是ExtJS的基础概念和常用组件。 首先,让我们来了解一下ExtJS的核心概念。ExtJS基于组件模型,允许开发者构建复杂的用户界面,这些组件可以是按钮、...

    EXTJS开发包ext-3.2.0

    EXTJS开发包ext-3.2.0 EXTJS开发包ext-3.2.0

    ExtJS----HelloWorld程序源码

    它的核心特性包括组件化UI、数据绑定、强大的表格和图表功能、以及对现代浏览器的良好支持。"HelloWorld"是编程领域的传统入门示例,通常用于演示基本的使用方法和程序结构。 在"ExtJS----HelloWorld程序源码"中,...

    extjs_4.1.0_community_extjs4-mvc-complex-dashboard.zip

    通过深入学习和研究这个压缩包中的示例,开发者可以掌握ExtJS 4.1.0 MVC模式的精髓,了解如何组织和构建复杂的Web应用程序。这有助于提高开发效率,同时保证代码的可维护性和可扩展性。对于想要提升ExtJS技能的前端...

    extjs实例--------嗖嗖嗖

    3. **examples**:这个目录可能包含了ExtJS的各种示例代码,用于演示如何使用库中的不同功能和组件。通过查看这些例子,初学者可以学习如何构建和配置各种UI元素,例如面板、表格、图表等。这可能是开发者尝试理解和...

    ExtJS笔记---Grid实现后台分页

    这篇“ExtJS笔记——Grid实现后台分页”探讨了如何在ExtJS的Grid组件中实现高效的后台分页功能。 后台分页是一种常见的数据处理策略,特别是在大数据量的情况下,它将数据分批加载,避免一次性加载所有记录导致的...

    extJs2.0+spket-1.6.11.zip

    3. **代码格式化和重构**:1.6.11版本可能包含了代码格式化工具,以及一些基本的代码重构功能,帮助维护整洁的代码结构。 4. **集成调试器**:Spket 可能集成了JavaScript调试器,允许开发者设置断点、查看变量值,...

    extJs例子-------

    ext基本的控件例子ext基本的控件例子ext基本的控件例子ext基本的控件例子

    extjs oracle分页---Json转换

    它提供了丰富的组件和功能,包括表格、面板、窗口、菜单等,以及数据绑定机制,便于处理和展示数据。在与服务器端通信时,ExtJS经常使用Json(JavaScript Object Notation)格式,因为Json轻量、易于解析且兼容性好...

    ExtJs 1.1(zh-CN)

    ExtJs的核心特性包括组件化开发、数据绑定、布局管理、拖放功能以及丰富的用户界面组件。 一、组件化开发 ExtJs采用组件化的设计思想,允许开发者将复杂的用户界面拆分为独立的可重用组件。这些组件可以是简单的...

    ExtJS桌面化(desktop)插件Demo项目

    1. ExtJS框架的应用,特别是其组件化和MVC模式。 2. "desktop"插件的使用和定制,包括桌面环境的构建、小部件管理和任务管理。 3. 动态加载技术,通过`Ext.Loader`优化应用性能。 4. 配合myeclipse进行Web应用的开发...

    Extjs4---combobox省市区三级联动+struts2

    #### 二、Extjs4 combobox组件介绍 1. **基础概念**: - `combobox`(组合框)是Extjs框架中一种常用的UI控件,用于展示下拉列表供用户选择。 - 在本例中,combobox被用来实现省市区的选择功能,即用户选择省份后...

    Extjs源码之--Ext事件机制/继承关系

    在EXTJS这个强大的JavaScript框架中,事件机制是其核心组件之一,它允许组件之间进行通信和交互。在“Extjs源码之--Ext事件机制/继承关系”中,我们将深入探讨EXTJS如何处理事件以及其类层次结构。EXTJS的事件处理...

    Extjs实战 --- 发布小纸条

    在Web应用开发中,ExtJS是一个强大的JavaScript库,它提供了丰富的用户界面组件和强大的数据绑定功能。本实战案例将带你深入理解如何结合ExtJS、Struts和MySQL来创建一个实用的“发布小纸条”功能。这将涉及到前端UI...

Global site tag (gtag.js) - Google Analytics