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

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

    博客分类:
  • Ext
阅读更多

 

TextField

TextField在Ext.form.TextField包下面(叫包叫习惯了),是form组件中的一个,是对传统文本框的封装(input)。

 

在页面中直接使用某些Component是不起作用的,因为Ext UI设计是类似Swing布局的,布局的宿主对象必须是Ext.Container或者Ext.Container的子类,详细的使用方法后面慢慢了解。

 

根据上面的原理,我们要在页面中创建一个TextField组件,就需要给它一个宿主,最常用的就是Panel,先说TextField,简单使用Panel,Panel的详细用法接下来谈。看个例子:

<script type="text/javascript">
Ext.onReady(function() {
	/* 定义TextField的宿主Panel */
	var _panel = new Ext.Panel({
		renderTo:Ext.getBody(),
		/* 指定布局器 */
		layout:"form",
		labelWidth:30,
		/* 订阅事件 */
		listeners:{
			/* render:当当前对象被正确构造后触发的事件 */
			"render":function(_panel) {
					/* 添加一个组件到Panel中,在这个时候 new TextField对象 */
					_panel.add(new Ext.form.TextField({
						id:"txt_name",
						fieldLabel:"姓名"
					})
				);
			}
		}
	});
	
	var _button = new Ext.Button({
		renderTo:Ext.getBody(),
		text:"取得文本框的值",
		handler:function() {
			/* getCmp - 得到指定ID的Component对象 */
			alert(Ext.getCmp("txt_name").getValue());
		}
	});
});
</script>

 

 

显示结果:在文本框中输入值,然后点击按钮可以取到指定文本框中的值。


实际上TextField的代码只有很少

new Ext.form.TextField({
	id:"txt_name",
	fieldLabel:"姓名"
})

 

 

属性

  • fieldLabel:文本框的标签名称,通常我们使用HTML写这样的代码的时候都是这样
<label for="name">姓名:</label><input type="text" id="name" />

 在页面中显示: ,当单击文字“姓名”的时候,焦点会落到后面的input框中,因为在label中设置"for"属性,指向id为"name"的Component,另外,在严格标准的情况下,label标签是Accessibility(可访问性)所要求的,label标签会表明他所指向的对象,从而将label标签中的内容和指向的内容关联起来,严格意义上讲某些特定的情形下label标签是不可缺少的。(可能有不太了解Accessibility的朋友,可以参考:http://www.junchenwu.com/WAI/wai-pageauth.html

 

 

方法

  • getValue():得到当前文本框的值,这个方法很简单就不多说了,

 TextField有很多的属性和方法,先介绍最基本的这些,随着深入的使用,再慢慢补充。

 

 

Panel

Panel是Ext布局中非常重要也是非常常用的的一个组件,Panel使用起来非常灵活,先来一个简单的例子:

<script type="text/javascript">
	Ext.onReady(function() {
		new Ext.Panel({
			renderTo:Ext.getBody(),
			width:200,
			height:200,
			title:"面板"
		});
	});
</script>

 

效果:

 

属性

  • title:Panel的标签名
  • width:指定Panel的宽度
  • height:指定Panel的高度

方法

  • addButton(String/Object _config, Function _handler, Object _scope),添加一个Button到Panel中

在Panel中添加两个Button对象,这里的addButton()方法是“设计时”方法,要在当前对象未构建之前调用,这里深层次的原因是JavaScript内部机制决定的,在当前对象构建之后add的话就会出现错误。

 

来看addButton()方法的使用:

<script type="text/javascript">
	Ext.onReady(function() {
		
		var _panel = new Ext.Panel({
			frame:true, /* frame为true把四个角变成圆角,并且会渲染颜色 */
			width:200,
			height:200,
			title:"面板"
		});
		
		_panel.addButton({text: "确 定"});
		
		_panel.addButton(new Ext.Button({
				text:"new Button",
				minWidth:100
			}));
			
		/* 此时调用render方法,而不是在Panel的构造参数中使用renderTo()方法,调用render方法对象即将构建完毕,在对象构建之后再调用addButton()方法是不正确的 */
		_panel.render(Ext.getBody());
	});
</script>

 

 效果: ,对比一下,加上frame属性之后美观了不少。

 在构建Button对象的过程中,给addButton()添加了两个不同的参数

/* 会由form对象为Button添加默认的样式 */
_panel.addButton({text: "确 定"});
		
/* Button的样式完全自定义,form对象不会干预 */
_panel.addButton(new Ext.Button({
		text:"new Button",
		minWidth:100
	}));

 

 这些细节问题还是有必要注意的,避免以后样式的不统一,而找不到解决办法的情况发生。

 

 

 

用CSS样式表控制Panel的位置

 

<!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>Panel</title>
<link type="text/css" rel="stylesheet" href="../../ext/resources/css/ext-all.css">

<style type="text/css">
.contain{
	/* 设置背景 */
	background:#000;
	/* 居中设置 */
	margin:0 auto;
	width:500px;
	height:500px;
	/* 外层div相对定位 */
	position:relative;
}

.center{
	/* 居中设置 */
	margin:0 auto;
	/* 内层div相对外层div绝对居中 */
	position:absolute;
	/* 指定内层div的位置 */
	top:150px;
	left:150px;
}
</style>

<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">
	Ext.onReady(function() {
		var _panel = new Ext.Panel({
			frame:true, 
			width:200,
			height:200,
			title:"面板"
		});
		_panel.addButton({text: "确 定"});
		_panel.addButton(new Ext.Button({
				text:"new Button",
				minWidth:100
			}));
			
		/* 动态创建元素 DomHelper.append */	
		_panel.applyToMarkup(Ext.DomHelper.append(Ext.getBody(),{
				tag:"div",
				cls:"contain",
				cn:[{
					tag:"div",
					cls:"center"
				}]
			}, true).child("div"));
	});
</script>
</head>
<body>

</body>
</html>

 

 

通过CSS就可以控制创建的Panel在页面中的位置,这样做的好处是巨大的,我们不用在页面使用table等传统标签进行布局,使用CSS我们可以做到这一点,而且修改很灵活,要改变创建的元素在页面中的位置,我们不需要对Ext的代码进行任何的改动,只需要修改CSS文件就可以了,这也实现了结构化文档与表现分离的思想。如果不使用CSS来进行表现,将布局代码写死在Ext代码中,那么一旦要进行修改,代价会非常大。

 

页面效果:

 

这里在向页面中添加元素的时候用到了applyToMarkup()方法,该方法类似render(),简单的解释一下:

 

如果在构造参数中定义:

  • renderTo:将当前对象放到renderTo指定的元素里面
  • applyTo:直接在当前对象之上构建

在构造方法外部定义:

  • render:等同于renderTo()
  • applyToMarkup:等同于applyTo()

DomHelper.append是Ext中动态创建Dom对象的方式,也是经常用到的一个方法,来看API中的定义

 

DomHelper.appendMixed el , Object/String o , [Boolean returnElement ]  ) : HTMLElement/Ext.Element

 

该方法创建了一个新的DOM元素,并且把它添加到第一个参数指定的DOM对象之中。

 

Parameters:
  • el : 可以是多种形式的上下文元素
  • o : 对象或字符串类型,指定的DOM 对象或者HTML行级元素
  • returnElement : 可选,Boolean 类型,如果值为true,返回一个Ext对象元素,否则返回普通的HTML元素
Returns:
  • HTMLElement/Ext.Element :新的HTML节点

上面例子中第二个参数指定是的DIV对象

{
	tag:"div",
	cls:"contain",
	cn:[{
		tag:"div",
		cls:"center"
	}]
}
  •  tag:target,目标是DIV
  • cls:class,指定CSS 样式
  • cn:childNode,子节点
  • []:中括号中可以动态生成多个子节点对象

 

Ext.DomHelper.append(Ext.getBody(),{...}, true).child("div")
  •  .child("div"):append到指定对象的子节点中第一个DIV上

 

带有TextField和Button的Panel  

传统写法的例子代码:

<script type="text/javascript">
	Ext.onReady(function() {
		var _panel = new Ext.Panel({
			title:"登陆",
			width:300,
			height:150,
			layout:"form",
			frame:true,
			labelWidth:45,/* 调整TextField前文字label的宽度 */
			listeners:{
				"render":function(_panel){
					/* width:200 指定TextField的宽度 */
					_panel.add({xtype:"textfield",fieldLabel:"用户名", width:200});
					_panel.add(new Ext.form.TextField({
							fieldLabel:"密 码", 
							width:200
						}));
				}
			}
		});
		
		_panel.addButton({text:"确定"});
		_panel.addButton(new Ext.Button({
				text:"取消",
				minWidth:100
			}));
			
		_panel.render(Ext.getBody());
	});
</script>

 

 

效果:

这里_panel.add()方法和上面的addButton()看起来很像啊,传入的参数形式也是一样的。

 

 

在Ext2.0之后的版本,添加了 items 和 buttons 属性,使用他们可以方便的进行form中Component的设计,代码更加简洁,来看一个例子:

<script type="text/javascript">
	Ext.onReady(function(){
		
		var _panel = new Ext.Panel({
				title:"登陆",
				width:280,
				height:150,
				frame:true,
				layout:"form",
				labelWidth:60,/* 调整TextField前文字label的宽度 */
				/* 如果items没有明确指出类型,则使用defaults配置 */
				defaults:{xtype:"textfield", width:200},
				items:[
						{fieldLabel:"用户名"},
						{fieldLabel:"密 码"}
					],
				buttons:[
						{text:"确定"},
						{text:"取消"}
					]
			});
		
		_panel.applyToMarkup(Ext.DomHelper.append(Ext.getBody(),{
					tag:"div",
					cls:"contain",
					cn:[{
						tag:"div",
						cls:"center"
					}]
				},true).child("div"));		
		
	});

</script>

 

效果是一样的,使用这种方法代码看起来更加整齐和意义明确。

 

 

 

xtype 属性:

  • 在Ext可视化组件部署中有一种 xtype 机制,即通过指定 xtype 的值,来告诉容器组件如何初始化包含的组件,如: xtype:"textfield" ,表示使用 Ext.form.TextField 来初始化。
  • xtype 是由一个对照表来实现的,就像通常我们在数据库里面配置一张配置表,给出键值对实现是一样的,可以从API中查到:


  •  

 

 

理解了上面的知识,再综合起来创建一个这样的Panel是不是觉得轻松多了?

 

校验:参考 - VType

 

 

 

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

 

 

 

 

 

  • 大小: 6.9 KB
  • 大小: 644 Bytes
  • 大小: 1.6 KB
  • 大小: 3.4 KB
  • 大小: 10.8 KB
  • 大小: 61.4 KB
  • 大小: 3.5 KB
分享到:
评论
2 楼 jiht594 2012-11-13  
jiht594 写道
楼主你好:这个第一段js代码+那一行html代码
我试的时候为什么只显示了那个label,panel和button根本看不到,只有一条蓝线.??
新学这个东西,求指导

好吧 提示说panel没有addButton方法
用buttons属性new了一个就好了
1 楼 jiht594 2012-11-12  
楼主你好:这个第一段js代码+那一行html代码
我试的时候为什么只显示了那个label,panel和button根本看不到,只有一条蓝线.??
新学这个东西,求指导

相关推荐

    ext-3-TextField-sample.rar_ext_ext TextField_ext textfield inp

    在提供的压缩包中,"ext-3-TextField-sample.rar" 涉及到的是ExtJS 3.x版本中的TextField组件,这是一个基本的用户输入控件,常用于收集用户在网页上的文本信息。这个示例着重介绍了如何创建和使用TextField。 ...

    easy-ui onchange/easy-ui添加onchange

    Easy-UI是一个基于jQuery的轻量级前端开发框架,它提供了丰富的组件,如表格、窗口、菜单、对话框等,大大简化了网页开发工作。在Easy-UI中,`onchange`事件是用于监听用户在组件(如Combobox)中做出改变时触发的...

    material-ui-currency-textfield:React Material UI的“货币”文本字段

    Material-ui货币文本字段 CurrencyTextField是 组件。 输入货币编号时,它提供了用户友好的体验。 CurrencyTextField包装的功能性和它的端口在材料的UI。 主要特点: 自动添加数千个分隔符。 自动添加模糊的小数。 ...

    Atom-material-ui-snippets,材料.zip

    此外,这个扩展包可能还包括对其他 Material-UI 组件的支持,如 TextField、IconButton、AppBar、Drawer 等,以及样式对象(makeStyles, makeStyles hook)和 ThemeProvider 的相关代码片段。这些代码片段遵循最佳...

    Gwt-ext学习笔记之基础篇

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

    Python库 | m3-ui-2.2.95.tar.gz

    例如,你可能会用到m3-ui中的Button、TextField、Layout等组件来搭建界面布局。 Python库的版本号管理对于保持软件兼容性和稳定性至关重要。m3-ui的2.2.95版本可能引入了一些新特性、修复了已知问题或者提高了性能...

    Gwt-ext学习笔记

    ### Gwt-ext学习笔记知识点详解 #### 一、GWT与Gwt-ext简介 - **GWT (Google Web Toolkit)**:是由Google开发的一款用于构建高度交互式的Web前端应用的开发框架,它允许开发者使用Java语言编写客户端代码,并通过...

    Flutter-Book-Movie-UI.zip

    Movie UI项目中会包含各种自定义和内置的Widgets,如AppBar、IconButton、Card、TextField等。 2. **StatefulWidget与 StatelessWidget**:项目中可能会使用这两种类型的Widgets来处理动态数据和静态视图。 3. **...

    Ext表单组件之textField

    本篇我们主要关注"Ext表单组件之textField",它是最基础也是最常用的输入控件,用于接收用户的文本输入。 一、Ext.form.TextField简介 Ext.form.TextField是Ext JS中的一个核心组件,它允许用户在表单中输入单行...

    formik-material-ui:在Material-UI中使用Formik的绑定

    在Material-UI中,我们通常使用`TextField`等组件来创建表单。"formik-material-ui"库提供了与这些组件的绑定,使得它们能够直接与Formik的状态和操作进行交互,例如: 1. **自动绑定**:库会自动将`onChange`、`...

    Django学习笔记--阉割版

    Django学习笔记--阉割版 Django是Python下的一个免费开源的Web应用框架,使用它可以快速构建可维护、可扩展、灵活的网站。下面是 Django 学习笔记的总结,涵盖了 Django 的安装、项目结构、应用程序、视图、模型、...

    material-ui-password-field:使用Material-UI的密码字段

    如果您想亲自尝试该组件而不是观看gif,请转到进行实时演示! 安装 npm i --save material-ui-password-field 用法 该组件的用法非常简单:只需将无聊的密码TextField替换为闪亮的新PasswordField 。 import ...

    cs-ui:React UI组件

    CS-UI-React UI组件 作者 M2数据中心: 网站: : 安装 初始配置: 在尝试运行开发环境之前,您需要在本地计算机上安装 (&gt; = 10.0.0)。 CS-UI作为[npm软件包]提供 [稳定的v1.0.0] // with npm npm install cs...

    create-react-app-material-ui:使用Material-UI表单轻松创建React App提交示例

    Material-UI是React社区中最受欢迎的设计系统之一,它提供了丰富的组件库,遵循Google的Material Design指南,使开发者能够快速构建美观且响应式的用户界面。 首先,让我们了解React的基础知识。React是由Facebook...

    chrome ui 框架学习笔记

    ### Chrome UI框架学习笔记 #### 一、简介与概述 Chrome作为一款广受欢迎的浏览器,在其用户界面(UI)的设计上采用了一套独特的框架。本文档旨在深入探讨Chrome UI框架的基本概念、架构及其实现原理,尤其关注于...

    flutter-ui源码

    通过深入学习和分析“flutter-ui”源码,开发者可以更好地掌握Flutter在Windows桌面端的UI设计技巧,提升跨平台开发能力。这不仅有助于创建出美观、流畅的应用程序,也能帮助开发者在遇到问题时迅速定位并解决。

    swift-一组酷炫的SwiftUI库组件和动画集合

    1. **预定义组件**:SwiftUI提供了一系列内置组件,如Button、TextField、Image、View等,它们可以快速构建基础界面。这些库可能提供了额外的自定义组件,例如高级图表、滑块、进度条等,丰富了界面元素的多样性。 ...

    Ext组件描述,各个组件含义

    ### Ext组件概述与详解 #### 一、Ext基础组件 **1.1 Box Component (Ext.BoxComponent)** - **xtype**: `box` - **功能描述**:Box Component 是一个非常基本的 Ext 组件,主要用于定义具有边框和其他布局属性的...

    javafx-textfield-change-demo

    本示例"javafx-textfield-change-demo"就是关于如何实现这一功能的演示。 JavaFX提供了事件处理机制,我们可以使用ChangeListener接口来监听TextField的文本变化。当TextField中的文本发生改变时,ChangeListener的...

    TableView-TextField-1.zip

    通过"TableView-TextField-1.zip"中的资源,开发者可以学习到如何在实际项目中有效解决这些问题,创建一个稳定、用户体验良好的带有TextField的TableView。这个项目可能包含了具体的代码实现、注释以及示例数据,有...

Global site tag (gtag.js) - Google Analytics