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

本文介绍了Ext框架中Button组件的基本用法,包括构造参数、常用属性、方法和事件的使用。并通过实例展示了如何创建和定制按钮。

Component

 

在Ext中对常用的UI组件都进行了一系列的封装,而各个组件都具有一些相同的属性或者事件,这些相同的属性被封装起来成为Component类,每个UI组件都继承Component类,可见Ext在面向对象方面有很好的实现。看一下Component中的定义:

Js代码 复制代码  收藏代码
  1. //构造方法,传入config参数   
  2. Ext.Component = function(config){   
  3.     config = config || {};   
  4.     if(config.initialConfig){...};   
  5.     this.initialConfig = config;   
  6.     Ext.apply(this, config);   
  7.     this.addEvents(...);   
  8.     this.getId();   
  9.   
  10.     Ext.ComponentMgr.register(this);   
  11.     Ext.Component.superclass.constructor.call(this);   
  12.   
  13.     if(this.baseAction){   
  14.             this.baseAction.addComponent(this);   
  15.     }   
  16.   
  17.     //初始化组件   
  18.     this.initComponent();   
  19.   
  20.     if(this.plugins){....}   
  21.   
  22.     //初始化状态   
  23.     if(this.stateful !== false){   
  24.             this.initState(config);   
  25.     }   
  26.   
  27.     if(this.applyTo){....}   
  28. };   
  29.   
  30. // private   
  31. Ext.Component.AUTO_ID = 1000;   
  32.   
  33. //继承Observable,实现事件机制   
  34. Ext.extend(Ext.Component, Ext.util.Observable, {   
  35.     blur : function(){....},   
  36.     focus:function(){....},   
  37.     enable: function(){....},   
  38.        
  39.     .......   
  40. });  
//构造方法,传入config参数
Ext.Component = function(config){
	config = config || {};
	if(config.initialConfig){...};
	this.initialConfig = config;
	Ext.apply(this, config);
	this.addEvents(...);
	this.getId();

	Ext.ComponentMgr.register(this);
	Ext.Component.superclass.constructor.call(this);

	if(this.baseAction){
	        this.baseAction.addComponent(this);
	}

	//初始化组件
	this.initComponent();

	if(this.plugins){....}

	//初始化状态
	if(this.stateful !== false){
	        this.initState(config);
	}

	if(this.applyTo){....}
};

// private
Ext.Component.AUTO_ID = 1000;

//继承Observable,实现事件机制
Ext.extend(Ext.Component, Ext.util.Observable, {
	blur : function(){....},
	focus:function(){....},
	enable: function(){....},
    
	.......
});

通过继承Observable,所有的UI Component都实现了事件机制,在使用的过程中可以方便的注册我们所需要的事件。

 

 

Button

对传统的Button,Submit,Reset进行封装,在放置Ext文件的source → widgets 目录下找到 Button.js 源文件,我们可以看到

Js代码 复制代码  收藏代码
  1. Ext.Button = Ext.extend(Ext.Component, {.....});  
Ext.Button = Ext.extend(Ext.Component, {.....});

 

可见Button是继承于Component类,  Button可以直接使用父类中定义的构造方法和事件机制。

 

看一个简单的例子:

Js代码 复制代码  收藏代码
  1. <script type="text/javascript">   
  2.     Ext.onReady(function() {   
  3.         new Ext.Button({   
  4.             renderTo:Ext.getBody(),   
  5.             text:"确定"  
  6.         });   
  7.     });   
  8. </script>  
<script type="text/javascript">
	Ext.onReady(function() {
		new Ext.Button({
			renderTo:Ext.getBody(),
			text:"确定"
		});
	});
</script>

 

构造方法中涉及的参数:

  • renderTo:将当前对象所生成的HTML对象放到指定的对象中,这个例子中就是把new 出来的Button对象放到页面的Body中
  • Ext.getBody:Ext中封装Dom Element的Body对象,在document.body的基础上进行的封装,document.body = Ext.getBody.dom
  • text:按钮上显示的文字

 

看一个漂亮的Button就出来了: ,和通常HTML中的Button明显不一样吧,EXT不但封装了UI Component中的属性、方法、事件,连显示的样式一样做了很好的封装,还有一点要啰嗦的,就是new 一个 Component 出来一定最后是以HTML对象表现出来的,这样浏览器才可以进行解析,也就是不管怎么花哨怎么变,最终的结果还得回到根儿上来。

 

 

 

来看Button中的一些常用的构造参数、属性、方法和事件: 

 

再看一个例子:

Js代码 复制代码  收藏代码
  1. <script type="text/javascript">   
  2.     Ext.onReady(function() {   
  3.         var _button = new Ext.Button({   
  4.             renderTo:Ext.getBody(),   
  5.             text:"确定",   
  6.             minWidth:100,   
  7.             handler:function() {   
  8.                 alert("this Button be clicked!");   
  9.             }   
  10.         });   
  11.            
  12.         alert(_button.text);   
  13.            
  14.         _button.setText("Hello World");   
  15.            
  16.         alert(_button.text);   
  17.            
  18.     });   
  19. </script>  
<script type="text/javascript">
	Ext.onReady(function() {
		var _button = new Ext.Button({
			renderTo:Ext.getBody(),
			text:"确定",
			minWidth:100,
			handler:function() {
				alert("this Button be clicked!");
			}
		});
		
		alert(_button.text);
		
		_button.setText("Hello World");
		
		alert(_button.text);
		
	});
</script>

 

 

构造参数

  • handler:指定一个函数句柄,在默认事件触发是调用,这里的默认事件是click
  • listeners:在对象初始化之前,就将一系列事件定义的手段,在进行组件化编程时,非常有用
  • 简单应用只有一个事件的时候只需要定义handler就可以了,如果响应的事件比较多需要定义listeners
  • listeners的使用:
  • Js代码 复制代码  收藏代码
    1. <script type="text/javascript">   
    2.     Ext.onReady(function() {   
    3.         var _button = new Ext.Button({   
    4.             renderTo:Ext.getBody(),   
    5.             text:"确定",   
    6.             minWidth:100,   
    7.                
    8.             listeners:{   
    9.                 "click":function() {   
    10.                     alert("fired listeners property");   
    11.                 }   
    12.             }   
    13.         });    
    14.     });   
    15. </script>  
    <script type="text/javascript">
    	Ext.onReady(function() {
    		var _button = new Ext.Button({
    			renderTo:Ext.getBody(),
    			text:"确定",
    			minWidth:100,
    			
    			listeners:{
    				"click":function() {
    					alert("fired listeners property");
    				}
    			}
    		});	
    	});
    </script>
    
     
  • 另外一种订阅事件的方法 on ,在上一篇  事件  部分中已经介绍过,实际调用的是addListener()方法
  • Js代码 复制代码  收藏代码
    1. Ext.onReady(function() {   
    2.         var _button = new Ext.Button({   
    3.             renderTo:Ext.getBody(),   
    4.             text:"确定"  
    5.         });   
    6.            
    7.         _button.on("click"function() {   
    8.             alert("fired add listener event");   
    9.     });  
    Ext.onReady(function() {
    		var _button = new Ext.Button({
    			renderTo:Ext.getBody(),
    			text:"确定"
    		});
    		
    		_button.on("click", function() {
    			alert("fired add listener event");
    	});

属性

  • minWidth:按钮的最小宽度,注意:这里是没有单位的,不能在数值后面加上px、em等单位
  • text:和构造参数中的text不同,属性text是获得当前按钮上的名称,构造参数text是设置Button显示的文字,而且该属性是一个Read Only的属性,我们不能直接修改这个属性,像button.text = "test",如果要更改text的值需要调用它的setText()方法。
  • 那么如何知道一个Component是ReadOnly的呢?这就从它的API里面找了,这个版本的API中没有写出来text属性,估计是认为它太简单了,换一个属性看一下

 方法

  • setText:设置按钮上的名称

事件

  • click:当点击按钮时触发

好了,Button先到这里,当然上面所介绍的是最基础的部分,后面遇到问题再回来补充。

<think>首先,用户的问题是:“我想在使用HBuilderX开发uni-app时,无法找到或引入uni-ui组件 请问HBuilderX 开发 uni-app 无法找到 uni-ui 组件”。这是一个关于uni-app开发中uni-ui组件无法使用的问题。 根据系统级指令,我需要: - 使用$...$格式的行内数学表达式。 - 独立公式用$$...$$格式。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 引用段落末尾添加引用标识。 - 回答结构清晰,逐步解决问题。 - 参考提供的引用内容。 提供的引用包括: - 引用[1]:关于uni-ui的入门教程,提到uni-ui是官方出品的扩展组件,需要HBuilderX版本3.3.5.20211229或以上。 - 引用[2]:关于uView-ui的踩坑经验,提到HBuilderX对uniapp的集成很好,有模板可用。 用户的问题具体是“无法找到或引入uni-ui组件”,所以我需要解决如何正确安装和使用uni-ui。 关键点: - uni-ui是uni-app的官方扩展组件库。 - 它需要特定的HBuilderX版本。 - 安装和引入方式可能因版本而异。 步骤来解决: 1. **确认HBuilderX版本**:因为引用[1]提到需要HBuilderX 3.3.5.20211229或以上版本。用户可能版本太低。 2. **安装uni-ui**:uni-ui是开箱即用的,但需要正确配置。 3. **引入组件**:在uni-app项目中,如何引入和使用uni-ui组件。 4. **常见问题**:如无法找到组件,可能的原因包括版本问题、配置错误等。 从引用[1]: - uni-ui效果展示:https://hellouniapp.dcloud.net.cn/pages/extUI/badge/badge - uni-ui组件代码手册:https://uniapp.dcloud.io/component/uniui/uni-ui - 开箱即用,无需配置(HBuilderX版本3.3.5.20211229或以上)。 所以,在回答中,我应该基于这个信息。 回答结构: 1. **介绍问题**:解释用户的问题。 2. **逐步解决**:提供步骤来检查和解决问题。 3. **生成相关问题**:在最后添加相关问题。 4. **添加引用**:在引用段落末尾添加标识。 最终回答: - 开头:确认问题。 - 步骤: a. 检查HBuilderX版本。 b. 安装uni-ui(如果需要)。 c. 在项目中引入组件。 d. 示例代码。 - 结尾:总结和生成相关问题。 生成相关问题: - 基于uni-ui的使用和常见问题。 确保语言:中文。</think>### 解决HBuilderX开发uni-app时无法找到或引入uni-ui组件的问题 在使用HBuilderX开发uni-app时,无法找到或引入uni-ui组件是一个常见问题。这通常是由于HBuilderX版本过低、配置错误或依赖未正确安装导致的。下面我将逐步指导您解决此问题,确保您的开发环境能正常使用uni-ui组件。uni-ui是uni-app官方出品的扩展组件库,开箱即用,但需要满足特定条件[^1]。 #### 步骤1: 检查并更新HBuilderX版本 uni-ui要求HBuilderX版本在**3.3.5.20211229或以上**才能无缝支持。如果您的版本过低,可能导致组件无法被识别。 - **操作步骤**: 1. 打开HBuilderX,点击顶部菜单的“帮助” > “检查更新”。 2. 如果版本低于3.3.5.20211229,请下载并安装最新版(当前推荐版本:3.8.12或更高)。 3. 更新后重启HBuilderX。 - **验证方法**: - 在HBuilderX中新建一个uni-app项目(选择“默认模板”)。 - 尝试在页面中引入一个简单的uni-ui组件,例如`<uni-badge>`。如果版本正确,HBuilderX会自动识别组件无需额外配置[^1]。 #### 步骤2: 正确安装和引入uni-ui组件 uni-ui是扩展组件,不需要额外安装(如npm包),但需在项目中显式引入。常见错误是未在页面或全局配置中声明组件- **操作步骤**: 1. **在页面中引入(推荐)**: - 打开您的uni-app页面文件(如`.vue`文件)。 - 在`<script>`部分使用`import`导入组件,并在`components`中注册。 - 示例代码: ```vue <template> <view> <uni-badge text="123" type="success"></uni-badge> </view> </template> <script> import uniBadge from '@dcloudio/uni-ui/lib/uni-badge/uni-badge.vue'; // 正确导入路径 export default { components: { uniBadge } // 注册组件 } </script> ``` 如果导入路径错误,HBuilderX无法解析组件。确保路径为`@dcloudio/uni-ui/lib/[组件名]/[组件名].vue`。 2. **全局引入(可选)**: - 在项目根目录的`main.js`文件中全局注册组件,避免重复导入。 - 示例代码: ```javascript import Vue from 'vue'; import uniBadge from '@dcloudio/uni-ui/lib/uni-badge/uni-badge.vue'; Vue.component('uni-badge', uniBadge); // 全局注册 ``` 3. **检查依赖**: - uni-ui依赖`@dcloudio/uni-app`和`@dcloudio/vue-cli-plugin-uni`。确保`package.json`中有这些依赖(HBuilderX新建项目时默认包含)。 - 运行`npm install`(如果使用npm)或通过HBuilderX的“工具” > “插件安装”更新依赖。 #### 步骤3: 排查常见错误原因 如果以上步骤无效,可能是以下原因导致: - **项目配置错误**: - 确保项目是uni-app类型(非普通H5项目)。在HBuilderX中,右键项目 > “重新识别项目类型”。 - 检查`manifest.json`文件,确保`"uni-app"`配置正确,无冲突插件。 - **缓存或IDE问题**: - 清除HBuilderX缓存:点击“运行” > “清理缓存并重启”。 - 如果组件仍无法显示,尝试新建一个空白uni-app项目测试uni-ui,以隔离问题[^2]。 - **网络或资源问题**: - uni-ui组件依赖在线资源(如字体图标)。确保开发环境网络通畅,或检查HBuilderX的“设置” > “代理配置”是否正常。 #### 总结 通过更新HBuilderX版本、正确引入组件和排查配置错误,您应该能解决uni-ui无法找到的问题。uni-ui是高效的工具,但需注意版本兼容性(HBuilderX ≥3.3.5.20211229)[^1]。如果问题持续,建议参考uni-app官方文档: - [uni-ui效果展示](https://hellouniapp.dcloud.net.cn/pages/extUI/badge/badge) - [uni-ui组件代码手册](https://uniapp.dcloud.io/component/uniui/uni-ui)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值