`
wly719
  • 浏览: 289984 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

extjs几个的问题总结

阅读更多
extjs几个的问题总结 事件触发机制

         给某一个控件添加事件。

obj.addEvents( {search : true });

         给某一个事件添加处理函数

         给一个对象或变量添加监听及对应得处理,可以在创建时,通过属性listener添加。

        或者通过 obj.on(‘event’,function(){})

         或者通过obj.addListener(“event”,function)



         出发一个事件,params是要传给事件对应的处理函数的参数

Obj.fireEvent(‘eventName’,params)
工具栏

获取工具栏元素方法

var items = this.preview.topToolbar.items;

           items.get("tab").enable();

           items.get("win").enable();
Panel及子类
ViewPort

Viewpor代表整个浏览器的显示区域,会被渲染到html body中,并会随着浏览器显示区域大小自动改变。
Window

1.       创建属性一般设置

{          width : 500,    

           height : 300,

           layout : "fit",

           constrain : true,    把窗口的显示位置限制在viewport中

           constrainHeader : true,

           items : this.form,

           plain : true,

           closeAction:’hide’

           frame : true,

           modal : true, 窗口显示时,把窗口以外的元素用一个样式遮盖

           buttonAlign : "center" 按钮居中

      }







2.       Beforeclose事件

当窗口关闭以前可以做一些操作,如检查窗口内部表单数据的改变与否

   winObj.on("beforeclose", this.checkDirty, this);

3.       按钮的获取

要获取window的按钮

winObj.buttons

disableButton:function(){

           for(i=0;i<this.buttons.length;i++)

               this.buttons[i].disable();//hide()

           },

      enableButton:function(){

           for(i=0;i<this.buttons.length;i++)    

            this.buttons[i].enable()//show();

      }
MessageBox

1.       点击确认/取消后执行function

   Ext.MessageBox.alert/confirm ("信息",msg,

function(button, text) {

//当confirm时 判断按钮

if (button == "yes")

   //TODO something

},  this);
TabPanel

当页签改变的时候出一个处理函数

Ext.getCmp("tabpanel").on("tabchange",this.tabChange,this);



获取某一个页签,在页签中的给id 属性,通过id获取

Ext.getCmp("tabpanel").getItem("id");




gridPanel

l         gridPanel 中gridView是控制grid的展现,通过viewConfig用来配置属性,其中

        autoFill : true,forceFit : true 比较重要

l         控制列菜单的显示与否

         enableHdMenu:false

l  对具有翻页功能的grid,当通过某一个参数获取store数据时,传输参数的方法必须是通过get方式,即在url后面追加或许通过baseParams传递。不能通过params传参。

l  Store.reload 方法用于加载当前页的数据 store.load重新加载数据返回第一页。

l  点击翻页按钮时,会调用store.load方法,并传把start和limit封装作为参数传进去,因此如果对查询结果集进行翻页得时候,要把查询条件要写到baseParams或追加到url中,以使翻页后的数据也是符合查询条件的。

l  当store的加载路径变了,要通过以下方式设置新的url

      this.store.proxy =new Ext.data.HttpProxy( {url : newURL } );
FormPanel
数据加载和提交注意事项

l         数据加载时,首先要配置reader,并且从后台返回的数据符合解析器的结构,一般跟后台的封装有关。目前所有数据均已list 或 page 形式返回。

l         form.load()方法,当数据加载成功或者失败的时候,都会调用reader解析结果json数据,因此json数据中必须有root(一般为result)指定的结果集。属性successProperty:"success" 用来指定form执行load 成功后要回掉的函数名,默认情况下没有指定。

l         数据加载或提交后,form将回掉success failure函数,submit 和load方法在回掉的处理稍微不同。

Success/failure: function(form, action) {

var jsonData = Ext.util.JSON.decode(action.response.responseText);

if (jsonData)   //dosomething}

}
检查是否有脏数据

formPanel.form. isDirty()
一些重要的事件

    当表单提交或加载成功(失败)后,触发以下事件

form.form.on("actioncomplete", handler, this);

      form.form.on("actionfailed", handler, this);

    
Combo控件

Combo控件通过store加载数据时会出现的问题

1. 当设emtyText时,如果没有选中选项则会把“请选择…”保存到数据库中

2. 当设readOnly:true 时,一旦选择了某一个选项,则会不到空值,即不选任何值

3. 但是当不只读时,用户又可以自己随便输入值,这时这些值没有对应得key值在数据库中

4. 输入“中”时,下拉框中出现以“中”打头的选项

5. 往数据库传送key而不传value ,即下拉框中显示“中国”,并选中时,提交表单传送“中国”对应得key值 而不是“中国”



下面为解决方法

{

xtype : "combo",

name : "clearingid",

fieldLabel : "付款类型",

hiddenName : "clearingid",  //隐藏字段,即往后台传输对应得字段,combo会把                                                                

                                    valueField的值存到这个隐藏字段中



store : pay_type_store,// 所要显示的下拉列表的数据对象

valueField : "codeVal1",    //store的值域

displayField : "codeName", //store显示域 “中国”



anchor : "100%",



emptyText : "请选择...",

forceSelection : true,  //强制只能选择列表中的值 ,解决3

mode : "local",  //从客户端加载数据

typeAhead : true,  //解决4

listeners : {

expand : function(combo) {

combo.reset();

}

}

}
有两个trigger的控件

自定义这类控件的方法

NewTrigger=Ext.extend(Ext.form.TwinTriggerField, {

      initComponent : function() {

           NewAddTriggerField.superclass.initComponent.call(this);      

      }, 

      trigger1Class : "x-form-add-trigger", //第一个trigger的样式

      trigger2Class : "x-form-list-trigger",//第二个trigger的样式

    

      onTrigger1Click : function() { //处理函数},

onTrigger2Click function() {//处理函数 }



//要重写这两个方法以便于后台交互,可以采用combo的处理机制

setValue : function(),

getValue : function()

}

);


Radio控件
Radio控件的布局

1.       方法一:

先在form里add一个

new Ext.form.Radio({
        fieldLabel : "Radio",
        name   : "sex",
        boxLabel : "boy",
        id    : "sex-boy",
        allowBlank : false,
        value   : "boy"
       })

然后在当前form render()后添加下面代码

Ext.DomHelper.insertAfter(Ext.DomQuery.selectNode("label:contains(boy)"), {
       tag: "input",
       id: "sex-girl",
       type: "radio",
       name: "sex",
       "class": "x-form-radio x-form-field"
      }, false);
Ext.DomHelper.insertAfter(Ext.get("sex-girl"), {
       tag: "label",
       "class": "x-form-cb-label",
       "for": "sex2",
       html: "girl"
      }, false);

2.       方法二:

     var radioPanel = new Ext.form.FormPanel({

           labelWidth : 60,

           labelAlign : "right",

           frame : true,

           maskDisabled : false,

           waitMsgTarget : true,

           autoScroll : true,

           bodyStyle : "padding:5px 5px 5px",

           buttonAlign : "center",

            width: 400,

           buttons : [

                      {

                            text : "save",

                            scope : this,

                            handler :  save

                      } ],

           items : [{

                 layout : "column",

                 defaults:{autoWidth:true},

                 items : [

                 {

                      layout : "form",

                      items : [{

                            fieldLabel : "单选框",

                            xtype : "radio",

                            name : "1",

                            boxLabel : "-优惠卡支付",

                            inputValue : "1",

                            checked : true



                      }]

                 },

                 {

                      xtype : "radio",

                      hideLabel : true,

                      name : "1",

                      boxLabel : "-优惠卡支付",

                      inputValue : "2",

                      checked : false

                 }, {

                      xtype : "radio",

                      hideLabel : true,

                      name : "1",

                      boxLabel : "-优惠卡支付",

                      inputValue : "3",

                      checked : false

                 }

                 ]

           }

           ]

      });

隐藏fieldLabel的两种方法:hideLable:true和不给fieldLabel属性并设labelSeparator:""
Radio控件传输数据

往后台提交数据前,首先通过getGroupValue获取单选框的值,这时创建的radio必须有inputValue值。

var v = radioPanel.form.findField("1").getGroupValue();

radioPanel.form.findField("1").setValue(v);

      form.form.on("beforeaction", handler, this);


Ext的一些常用函数

l         Ext.getCmp(‘cmpid’) 获取某一个控件,首先必须指定控件的id

l         Ext.get(‘id’) 获取某一个dom控件,该方法在fireFox里不支持 该方法等同于document.get()

l         Ext.apply(config1,config2)把后config2的数据覆盖到config1中,并覆盖原有数据。

l         Ext.applyIf(config1,config2)也是拷贝但是不覆盖原有数据。


IE7中formpanel串位问题

这个问题是由控件的布局引起。当formpanel加载完数据后,将重新局部。由于重新布局的时候采用的绝对位置,因此导致串位。解决方式重写 Element的mask方法。

Ext.override( Ext.Element, {

    mask: function( msg, msgCls )

    { //元素overflow  和 position

         if(Ext.isIE7 && this.getStyle("position") == "static"){

               this.setStyle("overflow", "auto"); 

        this.setStyle("position", "relative");           

        }

        if(!this._mask){

            this._mask = Ext.DomHelper.append(this.dom,{cls:"ext-el-mask"}, true); }

            this.addClass("x-masked");

            this._mask.setDisplayed(true);

            if(typeof msg == "string"){

                if(!this._maskMsg){

                    this._maskMsg = Ext.DomHelper.append(this.dom,

                                       cls:"ext-el-mask-msg", 

                                       cn:{tag:"div"}}, true);

            }

            var mm = this._maskMsg;

            mm.dom.className = msgCls ? "ext-el-mask-msg " + msgCls : "ext-el-mask-msg";

            mm.dom.firstChild.innerHTML = msg;

            mm.setDisplayed(true);

            mm.center(this);

        }

        if(Ext.isIE && !(Ext.isIE7 && Ext.isStrict) && this.getStyle("height") ==

                                                                                              "auto"){           

            this._mask.setHeight(this.getHeight());

        }      

        return this._mask;

    }

});
分享到:
评论

相关推荐

    extjs4.2 desktop 拓展

    最后,"加了几个桌面图标"意味着拓展不仅限于基础功能,还增加了更多可自定义的元素,用户可以根据需求添加自己的应用快捷方式,进一步个性化他们的桌面环境。 总结来说,ExtJS 4.2 Desktop 拓展是一个集成了多种...

    EXTJS开发总结.pdf

    在EXTJS开发中,与服务器端的通信是一个关键问题。EXTJS不自带服务器端适配层,因此需要开发者自行处理数据结构。主要的通信方式包括: 1. 使用`Ext.Ajax.request`进行异步请求,服务器可以返回JSON或HTML片段。 2. ...

    extjs动态生成表格,前台+后台

    总结来说,ExtJS动态生成表格涉及以下关键知识点: 1. GridPanel:ExtJS中的核心组件,用于显示和操作表格数据。 2. ColumnModel:定义了GridPanel的列结构,包括列头和数据映射。 3. Store:用于存储数据的组件,...

    myeclipse中使用extjs缓慢 卡死 白屏 解决方法总结

    ### MyEclipse中使用ExtJS出现缓慢、卡死、白屏问题及解决方法总结 在进行Web开发时,经常会遇到一些工具与框架不兼容或配置不当导致的问题,这些问题往往会影响到开发效率。本文将针对在MyEclipse环境中使用ExtJS...

    extjs4环境搭建

    总结起来,搭建ExtJS4开发环境主要包括以下几个步骤: 1. 下载并解压ExtJS4的版本。 2. 选择需要的资源文件导入Eclipse项目。 3. 在HTML页面中引入ExtJS的样式和脚本文件。 4. 使用`Ext.onReady`初始化组件库并编写...

    extjs网页控件开发

    开发这样的控件需要掌握以下几个关键点: 1. **数据模型**:使用Ext.data.Model定义数据结构,以便在Store中存储和管理数据。 2. **数据绑定**:通过ExtJS的双向数据绑定机制,使得视图(控件)与模型之间的数据自动...

    extjs easyui小图标

    在“extjs easyui小图标”这个主题中,我们可以学习以下几个关键知识点: 1. **图标集成**:在ExtJS和EasyUI中,图标通常是通过CSS样式来实现的。每个框架会提供一个图标字体或SVG资源文件,开发者可以在HTML元素中...

    extjs grid数据导出excel文件

    首先,我们要明白EXTJS Grid的数据导出到Excel的过程通常涉及到以下几个步骤: 1. **获取Grid数据**:在EXTJS中,Grid的数据存储在Store对象中。要导出数据,我们需要先从Store中获取所有的记录。这可以通过调用`...

    ExtJS 可视化设计器

    这款可视化设计器包含以下几个核心知识点: 1. **组件拖放设计**:在ExtJS可视化设计器中,你可以通过拖放的方式选择各种预定义的组件(如表格、面板、按钮等)到工作区,并进行布局调整。这种直观的设计方式使得非...

    ExtJS3.3版本的BUG

    为了修复这个问题,可以考虑以下几种解决方案: - **修改代码逻辑**:尝试使用`this.up('window')`或`this.ownerWindow`来代替`this.ownerCt`,以确保能够正确地引用到`Window`组件。 - **更新版本**:升级到ExtJS ...

    extjs 前后台交互参数出现中文乱码问题的解决方法

    在使用MyEclipse开发工具进行Web应用开发时,尤其是采用ExtJS框架结合Ajax技术进行前后端数据交互的过程中,可能会遇到一个常见的问题:即通过Ajax发送带有中文字符的数据时,后端接收到的数据出现乱码现象。...

    extjs4.1下拉复选框完整DEMO

    这个DEMO包含以下几个关键组成部分: 1. **ext-all-debug.js**:这是ExtJS的核心库文件,包含了所有ExtJS组件和功能的源代码。在开发阶段,使用带调试信息的版本(如ext-all-debug.js)可以帮助开发者跟踪错误和...

    extjs java 上传文件进度条

    标题"extjs java 上传文件进度条"所涉及的知识点主要涵盖以下几个方面: 1. **ExtJS组件库**:ExtJS的核心在于其强大的组件库,其中包括用于创建各种UI元素的类,如按钮、表格、面板、窗口等。在文件上传过程中,...

    extjs 数据导出到Excel,数据列自选

    总结来说,这个知识点主要涵盖了以下几个方面: 1. 使用EXTJS Grid展示和操作数据,支持列的自定义选择。 2. ASP.NET作为后端处理数据和导出请求,使用特定库生成Excel文件。 3. 解决中文乱码问题,确保Excel文件...

    extjs grid示例代码

    代码可能分为几个部分,如`store.js`、`columns.js`和`grid.js`,分别定义数据存储、列配置和Grid实例。每个部分都会详细展示如何配置和使用这些特性。 5. **实战应用** - **数据加载**:通常,`store`会连接到一...

    ExtJs + Struts2 + JSON 程序总结

    这通常需要引入JSON库,例如JSON-LIB,它依赖于几个其他库,如BeanUtils、Collections和Ezmorph。 `getAllOrder` 方法的实现可能包含以下步骤: 1. 使用DAO(数据访问对象)从数据库中获取订单列表。 2. 将每个订单...

    extjs desktop实例(个人/家庭收支系统)第2部分

    在这一部分中,我们将深入探讨以下几个关键知识点: 1. **ExtJS Desktop**:这是一种高级的布局模式,模拟了传统的桌面操作系统界面,包括任务栏、桌面图标、启动菜单等元素。在个人/家庭收支系统中,桌面环境提供...

    Extjs测试题

    2. ExtJS的组件分类:ExtJS的组件主要可以分为基本组件、工具栏组件、数据通信组件、表单及元素组件等几大类。基本组件是构建用户界面的基础元素,工具栏组件提供常用的界面组件如按钮、菜单等,数据通信组件帮助与...

    Extjs简明总结(教程)

    下载后的文件包通常包含了以下几个关键部分: 1. `adapter` 目录:这里包含不同浏览器和库的适配器,确保ExtJS能够兼容多种环境。 2. `build` 目录:存放经过压缩的ExtJS源码,适用于生产环境。 3. `docs` 目录:...

    Extjs版酒店管理系统

    酒店管理系统的功能模块通常包括以下几个方面: 1. 客房管理:系统应能对酒店的所有客房进行管理,包括房间类型、状态(空闲/占用/维修中)的跟踪,以及房价设置等功能。 2. 预订管理:通过此模块,客人可以在线...

Global site tag (gtag.js) - Google Analytics