Extjs--编写时的常用小代码和注意点

1.    当对应表没有自增主键但是值又必须唯一时,

解决:

//添加 角色序号不能重复 的逻辑
var m = grid.store.getModifiedRecords();   //获得grid中修改后的值(包括 编辑的 和 新增的)
var codeRepeat = "";
store.each(function(record) {
if(record.get('roleCode') == m[i].get('roleCode')){
      codeRepeat += "repeat";   //新增的行内容会自动加入store中,each的时候总是能找到一个自己,若出现两次表示有重复
    };
});
if(codeRepeat == "repeatrepeat"){
    Ext.Msg.alert('信息提示', '角色序号不能重复!');  //本来想在each里面进行Ext.Msg.alert的,但是貌似不行所以只能到外面来了
    m[i].set('roleCode',"");  //清除对应的重复字段的值
    return false;
}

2.    对于Grid中某些字段编辑时不可修改,但新建时需要可以修改的问题

解决:利用flag字段对“新增”和“修改”的区别判断

                    在dao中传到前台的json中增加字段flag并设置默认值,页面新建时flag默认为空即可

 grid.on('beforeedit',function(e){          //在grid可编辑之前进行对应的判断
   		if((e.column==1)&&(e.record.get('flag')=='1')){   //e.column为对应的列,1为第一列
   			e.cancel=true;
   		}
    });


3.    注意点:java程序中查询的是数据库中 commit的数据 pl/sql中查询的是commit之后的数据

还不知道为什么


4.  FormPanel 数据提交时的技巧:如果允许的话,采用 先全部删除 再添加对应右侧所选全部数据



5.    js文件进行复制时:不要alt+a+copy  直接copy整个文件再更名  否则无法加载效果可能是格式编码问题


6.  重复加载store时的传值问题,

解决:在store加载之前传值

fromStore.on('beforeload', function(e,options){
        fromStore.baseParams={departId:departId,roleId:roleId,selectFlag:""};		
	});


7.   items : [ {},{},…..   ] 中 new 的时候 不用加{ }


8.  要注意 applicationContext.xml     和   struts-config.xml的联系 页面到后台的访问顺序  


9.Handler 获取绝对路径 :

String path = request.getSession().getServletContext().getRealPath(rootDir);

10.  上传文件时,由于IE8的安全性设置(IE8以下均没有),会出现虚拟路径,获取其上传的绝对路径:

{
	xtype : 'textfield',
	fieldLabel : '上传文件',
	name : 'userfile',
	id : 'userfile',
	inputType : 'file',
	width : 300,
	height : 20,
	blankText : 'File can\'t not empty.'
}

        var file_upl = document.getElementById('userfile');
        file_upl.select(); 
        var realpath = document.selection.createRange().text;   //获取到上传文件的绝对路径


11.   关于说也说不完的 String.split(" ");

      String s[] = filePath.split("\\\\");
      String s[] = filePath.split("and|or");
    
      1、如果用“.”作为分隔的话,必须:String.split("\\."),这样才能正确的分隔开,不能用String.split("."); 
      2、如果用“|”作为分隔的话,必须:String.split("\\|"),这样才能正确的分隔开,不能用String.split("|"); 
         “.”和“|”都是转义字符,必须得加"\\"; 
      3、如果在一个字符串中有多个分隔符,可以用“|”作为连字符,比如:“acount=? and uu =? or n=?”,把三个都分隔出来,可以用                   String.split("and|or"); 


12.  oracle 更改用户名:

select user#, name from user$ where name = 'ARWEN'; 
update user$ set name = 'WEIWENHP' where user# = 250; 

--接着重启数据库 或者这样强制更新下.
 
alter system checkpoint;
alter system flush shared_pool;  

但此方法不能用于更改密码(改了之后均失效)


13.  今天学的一句插入语句:

insert into T_INDEX_ROLE_TO_ASSE (role_code,report_code,Asse_Id,AUTHORITY) 
select 'admin_self',report_code,Asse_Id,'1' from T_INDEX_ASSE_TO_REPORT


14. HTML中文本太长的隐藏处理

<style type="text/css">
div{ width:100px; white-space:nowrap;overflow:hidden;text-overflow:ellipsis; }
</style>
</head>
<body>
<div>太长的文字如何做溢出隐藏处理太长的文字如何做溢出隐藏处理太长的文字如何做溢出隐藏处理太长的文字如何做溢出隐藏处理</div>


好像只能在 div 中实现该效果



15.  oracle中创建用户并赋权限

create user sysadmin identified by adminsys;
--alert user sysadmin default tablespace ts_user_data;
grant create session,create table,unlimited tablespace to sysadmin
grant dba to sysadmin


16.创建和删除表空间

create tablespace TS_USER_DATA
logging datafile 'D:\oracle_11g\oradata\idpora\TS_USER_DATA.dbf'
size 512m
autoextend on
next 64m maxsize 10240m

DROP TABLESPACE TS_USER_DATA INCLUDING CONTENTS AND DATAFILES;

17.doadd时候要先置''


18.新建才能修改的问题

//e.column 为第几列  flag判断是否为新增
grid.on( 'beforeedit',function (e){
            if (e.column == 0 && e.record.get('flag')== '') {
                   e.cancel = true;
             }
      } );

19.  ComboBox 中  mode: 'local' ,  可以使其store只取第一次加载时的数据 

20.获取所有store中的数据:

var mrids = '' ;
        store.each( function(record) {
             mrids += record.get('mrid')+',';
             });
        mrids = mrids.substring(0,mrids.length -1);   


21.两个combobox的级联:

    countycb.on('expand',function(newValue,oldValue){
		if(citycb.getValue() == ' ' || citycb.getValue() == '' ){
			countystore.filter('parentid','nothing');
        	Ext.Msg.alert('提示','请先选择查询“地市”!');
        	countycb.reset();
        	return false;
        }else{
        	countystore.filter('parentid',citycb.getValue());
        }
	});
    
    countycb.on('collapse',function(newValue,oldValue){
        countystore.filter('','');
	});
	
    citycb.on('change',function(newValue,oldValue){
       countycb.reset();
	});
	

22.
下拉框数据的jsonData 不需要callback包装


23. store 的数据复制  Ext.apply只能复制属性
stationStore.each(function(record){gridstationStore.add(record);});

24.查询对应表的所有字段

select * from sys.user_tab_columns where table_name='JX_LDPT_CPLANT'


25. datefield 判断是否为空
if(Ext.isEmpty(datecb.getValue())){
            Ext.Msg.alert('信息提示','请选择查询日期!');
                  return false;


26. 前后台乱码解决方法:

//--1.
 encodeURI(encodeURI(limitdataDesc.getValue()));
//--1.
 URLDecoder.decode(request.getParameter("desc"),"utf-8");


//--2.
 encodeURIComponent(limitdataDesc.getValue());
//--2.
 this.getRequestIsNull(request, "desc","utf-8");


27. 分页传值解决:

store.on('beforeload',function(){
        var str = '&county='+countycb.getValue();
        store.proxy.url = '../control/substationSituation?act=showSubstation'+str;
    });

//或者使用:

stationGridStore.baseParams={stationDesc:gridStationText.getValue()};


28.js时间问题:

varstartdt =newDate();
   varenddt =newDate(startdt.getTime()-15000);

  startdt.format("Y-m-d H:i:s");

  Date.patterns = {
    ISO8601Long:"Y-m-d H:i:s",
    ISO8601Short:"Y-m-d",
    ShortDate: "n/j/Y",
    LongDate: "l, F d, Y",
    FullDateTime: "l, F d, Y g:i:s A",
    MonthDay: "F d",
    ShortTime: "g:i A",
    LongTime: "g:i:s A",
    SortableDateTime: "Y-m-d\\TH:i:s",
    UniversalSortableDateTime: "Y-m-d H:i:sO",
    YearMonth: "F, Y"
  };

    dt.format(Date.patterns.ShortDate));

29. chrome 中 jsonData  的传递:

jsonData = jsonData + encodeURIComponent(Ext.util.JSON.encode(m[i].data)) + ',' ;
// ie中不需要encodeURIComponent


30.grid铺满窗口:

// grid 中的一个属性 
 viewConfig:{forceFit: true},


31.grid右键菜单显示:

       var rowIndex;
       //rowcontextmenu  行右键    cellcontextmenu 单元格右键
       grid.on( "cellcontextmenu" , function (grid,row_Index,cellIndex,e)                     
       {
             e.preventDefault();//去除浏览器本身的右键效果
             if (row_Index < 0) { return false ; }
             rowIndex = row_Index;
             if(cellIndex == 6) {
                  var treeMenu = new Ext.menu.Menu ([
                         {
                               xtype: "",
                              text: "查看详细" ,
                              iconCls: 'context-dog' ,
                              pressed: false ,
                              handler: show  //function () {}
                         }
             ]);
            treeMenu.showAt(e.getXY());//显示菜单
             }
        } );

        //handler 属性若为 show()  则不等右键菜单被点击而直接执行 


32. grid中sm 选中的记录:

var tranunitrecord = tranunitGrid.getSelectionModel().getSelected();


33.  html鼠标手势:
   style="cursor:hand"  手形鼠标
  • [<uri> ,]*: 根据用户定义的资源显示
  • auto: 正常鼠标箭头 
  • default: 默认鼠标
  • all-scroll: 三角方向标
  • crosshair: 十字标
  • hand:手型鼠标
  • pointer: 点状鼠标
  • move: 移动鼠标
  • e-resize,ne-resize,nw-resize,n-resize,se-resize,sw-resize,s-resize,w-resize: 改变大小鼠标
  • text: 文字鼠标/ I 形光标
  • not-allowed: 无效光标
  • wait: 等待鼠标
  • help: 求助鼠标/ ?
  • progress: 过程鼠标
  • inherit: 继承
  • vertical-text: 水平I 形光标
  • no-drop: 不可拖动光标


34.grid中添加按钮列的实现:
       //添加列单击事件,方便在列内添加功能按钮
       Ext.grid.GridPanel.prototype.processEvent = function(name, e) {
            this .fireEvent(name, e);
            var t = e.getTarget();
            var v = this .view;
            var header = v.findHeaderIndex(t);
            if(header !== false ){
                this .fireEvent( "header" + name, this , header, e);
            }else{
                var row = v.findRowIndex(t);
                var cell = v.findCellIndex(t);
                if(row !== false ){
                    this .fireEvent( "row" + name, this , row, e);
                    if(cell !== false ){
                     var col = this.colModel.config[cell];
                     var record= this .store.getAt(row);    
                     if( typeof col.onColumnCilck == "function" ){                   
                         col.onColumnCilck( this,record,row,cell,e);
                     }
                     this .fireEvent( "cell" + name, this , row, cell, e);
                    }
                 }
                  }
    }
   
       //按钮列
       Ext.grid.ButtonColumn = function(text) {
             var a={
                   text:text
             }
             return function (v, p, record) {
                  var tpl= new Ext.Template( '<button type="button"><font  style="cursor:hand;font: 8pt verdana;color:green;height=10;width:10"><U>{text}</U></font></button>' );
                    return tpl.apply(a);
                }
      }  

                 //cm中的实现
                 {
                  header: "操作",
                  width: 100,
                  dataIndex: 'compare' ,
                  align : 'center' ,
                  renderer : Ext.grid.ButtonColumn( '进行比较' ),  
                  onColumnCilck: function(grid,record,rowIndex,colIndex,e){}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值