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

EXTJS4 组件创建

阅读更多

最近做的一个项目采用EXTJS4作为展现层,利用2天的周末时间看了一下EXTJS4的API,非常简单的重写了一个分页,先将方法介绍如下,如下看组件效果

 

 

 

首先看组件代码:

Ext.define('Ext.ux.CustomPaging', {
    extend: 'Ext.toolbar.Paging',
    requires: ['Ext.toolbar.TextItem', 'Ext.form.field.Number'],
    
    bStr:'',
    aStr:'',
    maxStr:'',
    minStr:'',
	initComponent : function(){
    var pageSizeItems = [
          this.bStr,
          {
				xtype: 'numberfield',
				cls: 'x-tbar-page-number',
				allowDecimals: false,
				allowNegative: false,
				enableKeyEvents: true,
				width: 75,
				maxValue: 100,
				maxText: this.maxStr,
				minValue: 1,
				minText: this.minStr,
				selectOnFocus: true,
				value: this.pageSize,
				submitValue: false,
				nanText:'\u8bf7\u8f93\u5165\u6570\u5b57',
				listeners: {
					scope: this,
					keydown: this.onHlPagingKeyDown
					//blur: this.onHlPagingBlur
				}
            },this.aStr
      ];
	 var userItems = this.items || [];
	 this.items = userItems.concat(pageSizeItems);
	 Ext.ux.CustomPaging.superclass.initComponent.call(this);
    },
	onHlPagingKeyDown: function(field, e){
        if(field.isValid()){
            var k = e.getKey();
			if(typeof(k) == "undefined" || typeof(k) == "null" || k == null || k == ""){
			    k = window.event.keyCode;
			}
			var r = e.RETURN;
			if(typeof(r) == "undefined" || typeof(r) == "null" || r == null || r == ""){
			    r = '13';
			}
             if (k == r) {
                    e.stopEvent();
                    this.pageSize = field.getValue();
                    this.store.pageSize = field.getValue();
                    this.store.proxy.extraParams['pageSize'] = field.getValue();
                    this.store.loadPage(1);
                    this.doRefresh();
             }
        }
    },
    onHlPagingBlur: function(field){
        if(field.isValid()){
            this.pageSize = field.getValue();
            this.store.pageSize = field.getValue();
            this.store.proxy.extraParams['pageSize'] = field.getValue();
            this.store.loadPage(1);
            this.doRefresh();
        }
    } 
});  

 如上为扩展组件,如果你想引入,则需要如下声明:

 Ext.Loader.setConfig({enabled: true});
 Ext.Loader.setPath('Ext.ux', '${ctx}/ext-4.0.0/ux/');
 Ext.require([
			    'Ext.grid.*',
			    'Ext.data.*',
			    'Ext.util.*',
			    'Ext.state.*',
			    'Ext.ux.ProgressBarPager'
			]);
			
			
Ext.onReady(function() {
});

 然后你可以去创建此对象:

var bbar= Ext.create('Ext.ux.CustomPaging', {
		            pageSize: 20,
		            store: store,
		            displayInfo: true,
		            displayMsg:'显示第{0}条到{1}条记录,一共{2}条',
			    beforePageText:'第',
			    afterPageText:'页,共 {0} 页',
			    emptyMsg:'没有记录',
			    bStr:'每页',
			    aStr:'条',
			    maxStr:'每页不允许超过100条',
			   minStr:'每页不允许小于1条',
		            plugins: Ext.create('Ext.ux.ProgressBarPager', {})
	        });    

 最后,将bbar引用给GRID对象的bbar属性,如

bbar:bbar,

 使用EXTJS4的时候,发现一个BUG,就是如果你的STORE对象获取后台数据,如果为空,则渲染GRID时,会报错(这个BUG存在于IE6、7、8),我个人有一种解决方法,首先你定义的Model,需要增加一个额外的映射

 Ext.define('Task', {
	extend: 'Ext.data.Model',
        idProperty: 'root',
        fields: [
	    {name: 'noResult',mapping:'noResult'}, 







            {name: 'ratingId',mapping:'ratingId'}
        ]    
 });

 上面的 "noResult"为额外属性,用于区分是否存在列表数据,然后增加监听方法

var store = Ext.create("Ext.data.Store",{
	model: 'Task',
	autoLoad: false,
	remoteSort: true,
	pageSize: 20,
	proxy: {
	type: 'ajax',
	url: '${ctx}/customerDrain/getCustomerDrainListJSON.action',
	reader: {
	         type: 'json',
		 root: 'root',
		 totalProperty: 'totalProperty'
	},    
	extraParams:{pageSize:'20','customerDrainTO.branchCode':'',
                              'customerDrainTO.serviceUser':'',
                              'customerDrainTO.customerPackage':'',
                              'customerDrainTO.packageType':'',
                              'customerDrainTO.year':'',
                              'customerDrainTO.quarter':'',
                              'initFlag':Ext.getCmp('initFlag').getValue()}
        }
	,
	 listeners:{load:function(t,records,successful,operation){
		if(records.length == 1 && records[0].get('noResult')== 1){
			this.removeAll(false);
		}
	}}   





});		

  当然你后台封装数据,如果列表为空必须冗余此属性并赋值,如

//声明返回JSON对象
		JSONObject json = new JSONObject();
		json.accumulate("totalProperty", total);
		//声明JSON数组
		JSONArray jsonArray = new JSONArray();
		for(Object o:li){
			  //转换为JSON对象
			JSONObject j = JSONObject.fromBean(o);
			//添加的JSON数组
			jsonArray.put(j);
			
		}
		//屏蔽IE空列表BUG
		if("[]".equals(jsonArray.toString())){
			JSONArray jArray = new JSONArray();
			JSONObject j = new JSONObject();
			j.accumulate("noResult", 1);
			jArray.put(j);
			json.accumulate("root", jArray);



		}else{
			json.accumulate("root", jsonArray);
		}
		return json.toString();
 

 

分享到:
评论

相关推荐

    extjs 3.1 组件 使用

    它提供了丰富的组件库,包括表格、表单、菜单、工具栏、树形结构等,使得开发者能够轻松创建复杂的用户界面。在本篇文章中,我们将深入探讨如何在实际项目中使用ExtJS 3.1的组件。 首先,`css`目录包含了ExtJS 3.1...

    extJs3升级extjs4方案

    在组件创建方面,ExtJS4 也发生了很大的变化。例如,在 ExtJS3 中,我们可以使用以下代码来创建一个 TreePanel: ```javascript var ptree = new Ext.tree.TreePanel({ // ... }); ``` 而在 ExtJS4 中,我们需要...

    Ext学习笔记

    以上知识点总结涵盖了ExtJS4组件创建、动态加载、窗口组件创建和显示、HBox布局使用以及布局属性配置等方面,这将有助于开发者更好地理解ExtJS4的使用方法和布局管理,从而有效地开发出复杂的用户界面。

    Extjs3.0 常用组件介绍及怎么安装开发利器Spket

    **ExtJS 3.0 常用组件介绍** ExtJS 是一款强大的JavaScript库,用于构建富客户端Web应用。在3.0版本中,它提供了一系列丰富的组件,这些组件可以帮助开发者构建功能丰富的用户界面。以下是一些ExtJS 3.0中的常用...

    EXTJS 4 树形表格组件使用示例

    6. **可扩展性**:EXTJS 4的设计使得树形表格组件易于扩展,你可以添加自定义的行为、插件,甚至创建自己的节点类型。 在实际应用中,我们可以通过以下步骤来使用EXTJS 4的树形表格组件: 1. **创建Store**:定义...

    EXTJS4自学手册

    EXTJS4自学手册——EXT数据结构组件(创建一个Model) EXTJS4自学手册——EXT数据结构组件(Model数据验证,数据交互) EXTJS4自学手册——EXT数据结构组件 EXTJS4自学手册——EXT数据结构组件(proxy代理类之客户端...

    EXTJS 上传组件及示例

    在EXTJS 中,上传组件是用于实现文件上传功能的关键部分,这对于创建交互性强、用户体验良好的Web应用程序至关重要。本篇文章将详细解析EXTJS中的上传组件及其示例,帮助开发者更好地理解和使用这一功能。 EXTJS 的...

    extjs portal组件代码

    1. **Portlets**:Portlets是Portal中的基本单元,它们是可配置的、可拖动的、可调整大小的组件,可以包含任何EXTJS组件,如表格、面板、按钮等。Portlets之间可以通过拖放操作进行重新排列。 2. **Portal Column**...

    ExtJS 组件扩展

    #### 一、ExtJS组件扩展概述 ExtJS是一款基于JavaScript的开源前端框架,主要用于构建复杂的企业级Web应用程序。它提供了丰富的UI组件库,可以帮助开发者快速构建美观且功能强大的应用界面。为了更好地适应特定业务...

    ExtJs各组件简单应用例子导入到eclipse即可

    1. **下载ExtJS组件示例**:首先,你需要从官方或者其他可靠的源获取ExtJS的组件示例代码。这些示例通常包括HTML文件、JavaScript文件和可能的CSS文件,它们展示了如何在实际项目中使用各种组件。 2. **创建Eclipse...

    extjs4学习文档

    EXTJS4的学习文档还包括更多关于组件、布局、数据绑定、事件处理等方面的详细内容,这些都是构建EXTJS应用不可或缺的知识。通过深入学习和实践,开发者可以熟练掌握EXTJS4,创建功能丰富的Web应用程序。

    ExtJs组件类的对应表

    ### ExtJs组件类的对应表解析 #### 引言 ExtJs是一款强大的JavaScript框架,用于构建复杂的、数据密集型的应用程序。它提供了大量的组件和工具,使得开发者能够快速地创建美观且功能丰富的用户界面。本文将详细...

    Extjs自定义组件-下拉树

    ### Extjs自定义组件——下拉树:深入解析与实现 在现代Web开发中,Extjs作为一款功能强大且灵活的框架,深受开发者喜爱。它提供了丰富的UI组件库,能够帮助开发者快速构建复杂的用户界面。其中,自定义组件是Extjs...

    Extjs4 图片浏览器

    这款图片浏览器利用了ExtJS4的组件化、数据绑定和事件处理等特性,为用户提供了一个交互性强、功能丰富的图片浏览体验。 在实现这个图片浏览器的过程中,开发者可能使用了以下核心ExtJS4组件和技术: 1. **Panel...

    ExtJs4.rar

    在之前的版本中,组件系统就已经是其核心优势,而ExtJS4进一步优化了这一系统,引入了更加灵活的布局管理器,使得开发者可以更轻松地创建复杂且响应式的用户界面。例如,新的Box布局和Fit布局使得容器内的组件可以...

    extjs3.0 组件

    EXTJS 3.0 的窗体组件支持创建各种类型的数据输入表单,包括文本字段、选择框、日期选择器等。窗体不仅提供了丰富的验证机制,还支持异步提交,使得数据交互更加便捷高效。此外,EXTJS 还提供了强大的表单布局,如...

    Extjs4的demo

    在本例中,我们假设你已经在MyEclipse中创建了一个新的Web项目,并命名为"Extjs4"。将ExtJS 4.0.7的文件放入Webroot目录,以便于访问。 接下来,你需要设置一个学习环境。确保你的机器上已经安装了MyEclipse和...

    EXTjs组件.pdf

    EXTjs组件是构建EXTJS应用程序的核心元素,它们是基于Ext.Component的子类,具备自动化的生命周期管理,包括创建、渲染、尺寸调整、定位和销毁等关键功能。组件是EXTJS中可交互的部件,可以是按钮、表格、面板等,...

    ExtJS4多文件上传,带进度条及管理

    ExtJS4是Sencha公司推出的一个前端框架,它提供了丰富的组件库和强大的数据绑定机制,支持创建复杂的、响应式的Web应用程序。ExtJS4改进了布局管理、图表功能和性能,为开发者提供了更优雅的API和更好的用户体验。 ...

Global site tag (gtag.js) - Google Analytics