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

项目开发中遇到的extjs常见问题

阅读更多
1.把一个汉字转成两个字符计数
Ext.getCmp('searchKeyWord').getValue().trim().replace(/[^\x00-\xff]/g, '**').length


项目开发中遇到的extjs常见问题
事件触发机制

l         给某一个控件添加事件。

obj.addEvents( {search : true });

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

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

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

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



l         出发一个事件,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;

    }

});

分享到:
评论

相关推荐

    Python django Extjs 项目开发中的错误小记

    在Python Django项目开发中使用Extjs时,开发者们可能会遇到各种各样的小错误或者问题。下面将详细地讨论其中的一些问题以及解决方法,涉及知识点包括Python Django框架、前端库Extjs以及一些常见的编程问题。 1. ...

    Extjs5.0从入门到实战开发信息管理系统

    此外,我们还会涉及到权限控制、异常处理、单元测试等实际开发中的常见问题。 通过这个视频教程,你将学会如何使用ExtJS 5.0、Spring、Spring MVC和Mybatis搭建一个完整的信息管理系统,从需求分析、设计、编码到...

    extjs中文解决方案/Eclipse下的js和ext开发

    ### ExtJS中文解决方案与...通过以上介绍,我们可以了解到如何在Eclipse环境中搭建完整的JavaScript和ExtJS开发环境,并解决中文环境下可能遇到的一些常见问题。这对于从事Web前端开发工作的人员来说是非常有用的。

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

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

    ExtJs官方网站中文的入门指南 javascript

    这种方法虽然有效,但在复杂的应用场景下可能会遇到兼容性问题。 - **ExtJs中的实现**: ```javascript Ext.onReady(function() { var myDiv = Ext.get('myDiv'); }); ``` 此处`Ext.get`函数用于根据ID获取DOM...

    ext(extJS) 3.0 中文API CHM版 ext中文帮助文档

    通过这个CHM文件,开发者可以在没有网络的情况下离线查阅EXTJS 3.0的全部API,提升开发效率,快速解决遇到的问题。 在学习EXTJS的过程中,熟悉并掌握这个CHM文档,将有助于你深入理解EXTJS的架构和组件系统,从而更...

    tomcat部署项目常见问题

    ### Tomcat部署项目常见问题及ExtJS包说明 #### 一、Tomcat部署项目的注意事项 在使用Tomcat部署项目时,有一些重要的事项需要注意: 1. **确保项目与Tomcat版本兼容**:首先需要确保项目的JDK版本与Tomcat版本相...

    桌面型ExtJS4.2.1MVC+SpringMVC3.0.5注解开发实例补充说明

    在开发过程中,开发者常会遇到各种配置上的问题,通过合理配置这些工具,可以有效避免一些常见的错误和警告,从而加快开发进度和提高软件质量。 再来看文档的标签“补充”,表明这篇文档是对之前的开发实例文档的...

    用spket在Eclipse中对extjs进行代码提示配置

    - **问题2**:如果安装过程中遇到问题,确保Eclipse和spket插件版本兼容,必要时升级Eclipse版本。 - **问题3**:部分用户可能遇到代码提示不全的情况,此时可以尝试更新spket插件至最新版本,或者检查`sdk.jsb3`...

    ExtJS实用开发指南.pdf

    - **项目案例分析**:通过对具体项目的剖析,总结使用ExtJS过程中遇到的问题及解决办法。 - **常见问题解答**:收集整理开发过程中常见的疑问及其解决方案。 - **资源推荐**:推荐一些有用的工具、库和文档资源,...

    EXTJS 5.1 Examples

    2. **项目开发**:在实际项目中遇到难题时,可以从Examples中寻找类似的解决方案,并根据实际情况进行调整。 3. **代码复用**:很多示例代码可以直接应用于实际项目中,减少了重复劳动。 4. **扩展功能**:通过...

    ExtJS与.NET结合开发实例

    4. **实战演练**:通过实践项目来巩固理论知识,尝试解决实际开发中遇到的问题。 总之,ExtJS与.NET的结合为开发者提供了构建高质量Web应用程序的强大工具。通过深入了解这两种技术的特点,并通过实践不断探索,...

    Eclipse+ExtJS配置手顺.pdf

    在实际开发过程中,可能会遇到各种问题。利用Eclipse的调试功能可以帮助定位问题所在。此外,还可以利用Eclipse中的其他工具进行代码优化和性能分析。 通过以上步骤,你就可以在Eclipse中成功配置好ExtJS的开发环境...

    一个简单的extjs+ssh实例

    5. **查阅文档**:官方文档是学习的重要资源,SSH和ExtJS都有详尽的在线文档,可以帮助解决在实践过程中遇到的问题。 6. **参与社区**:加入相关的技术论坛或社区,与其他开发者交流,共同解决问题,提升技能。 ...

    EXTJS 4 web应用程序开发宝典

    ### EXTJS 4 Web应用程序开发宝典 #### 知识点概述 《EXTJS 4 Web应用程序开发宝典》是一本全面介绍EXTJS 4框架的书籍,它为读者提供了丰富的资源来掌握这一强大的Web应用开发工具。EXTJS 4相较于其前一版本EXTJS ...

    解决extjs API文档不断Loading

    标题“解决extjs API文档不断Loading”涉及到的问题是ExtJS框架在使用其API文档时可能出现的一个常见问题,即文档页面加载无休止,无法正常显示内容。这可能是由于多种原因引起的,包括网络连接问题、浏览器兼容性...

    轻松搞定Extjs

    - **拦路虎**: 指在搭建开发环境过程中可能遇到的问题,如依赖冲突等。 - **布署环境**: 包括设置项目文件结构、安装必要的开发工具等步骤。 - **Spket IDE**: 介绍这款IDE的基本特性和优势,帮助初学者快速上手。 -...

    extjs4学习资源大全

    在实际项目中,你可能还会遇到数据加载、异步通信(使用Ajax)和状态管理等问题,ExtJS4提供了解决这些问题的强大工具,如Store和Proxy。同时,不要忽视性能优化,合理使用组件配置和内存管理技巧,可以使你的应用...

    extjs+ssh的完全开发源代码

    EXTJS与SSH(Struts2、Spring、Hibernate)框架的集成是Web应用程序开发中的常见实践,这使得开发者能够利用EXTJS强大的前端交互能力和SSH的后端业务处理能力,构建高效、用户友好的企业级应用。在"extjs+ssh的完全...

Global site tag (gtag.js) - Google Analytics