extjs4 各种怪异问题
用extjs4 已经有一段时间了,过去开发的时候用过extjs2.2 因为放下了两年所有很多东西记得不是很清楚了,现在又直接使用4 突然发现这个世界变得太快连代码都变得这么快,大部分东西都完全不一样了,组建,数据交互.....,因为有采用了extjs4的新标准MVC 哎现在这个前段也搞什么三层,软件架构真是越来越复杂。在此主要整理记录一下在4中遇到一下比较奇怪的问题和解决方法,
1: MVC 初始化的问题,MVC 的核心是Controller 相当于Servlet 大量逻辑性的代码都写在里边主要需要引入 stores,
views,models 只要需要显示在页面的view都要引入到views 数组中,MVC 在加载Controller 的时候会创建stores 中所有的stores ,其他的views ,models 则不会创建对象,不知道他们这样设计的目的在于什么?
2: MVC 中 一般在View 中包含一个Store ,而在Store中会包含一个Model 的属性,view中包含store 例如store:'config.configmanage.DPCGridPanelStore', 只需要写入store的相对路径即可,但是 store 中包含model 则必须写入绝路径 model:'DELTA.model.config.configmanager.DPCModel', 不知道他们这样设计目的在于什么?
3: 属性赋值 :创建组建时候直接给组建的属性赋值 和通过Ext.apply()给组建赋值有区别,其中有一个应用就是

 tab 中新增一个grid 第一次没有问题,但是如果把这个tab 关闭 在点击新增这个grid 这个grid的就会显示出现问题,搞了好长时间发现吧 分页bar 通过apply的方式赋给grid 就不会出现这个问题,如果是直接配置给gird 就会出问题实在是不能理解。
4: baseParams 使用 一般在条件分页的时候使用 在使用2.2的时候 直接通过store.load({baseParams:{a:a}}); 现在通过这个方法没法执行具体使用方法
- var new_params = { ndpcId:id};
 - Ext.apply(win.query("#dpcCheckBoxTree")[0].getStore().proxy.extraParams,new_params);
 - win.query("#dpcCheckBoxTree")[0].getStore().load();
 
var new_params = { ndpcId:id};
			    Ext.apply(win.query("#dpcCheckBoxTree")[0].getStore().proxy.extraParams,new_params);
				win.query("#dpcCheckBoxTree")[0].getStore().load();
5: 在使用可编辑Grid 的时候 最后一步往往都是获得修改的数据集提交到后台
extjs3 的时候 通过调用store的getModifyRecords() 的方法 4以后改成getUpdatedRecords但是在调用后发现修改过的 model[] 的长度都是0 。解决办法
ext 的模型类:model有如下一个熟悉
idProperty : String
The name of the field treated as this Model's unique id (defaults to 'id').(唯一识别store中记录的字段)
默认为'id',如果没有配置这个属性,就需要在自己定义的model中提供一个名叫'id'的唯一主键。或者配置成自己的主键如:
- Ext.define('Tms.model.QualificationInfo', {
 - extend : 'Ext.data.Model',
 - idProperty : 'qiId',//定义自己的主键
 - fields : [{
 - name : 'qiId',
 - type : 'int',
 - useNull : true
 - }, {
 - name : 'qtId',
 - type : 'int',
 - useNull : true
 - }, 'qiName', 'qiParents', 'qiNovitiate', 'qiTrainingTask']
 - });
 
Ext.define('Tms.model.QualificationInfo', {
extend : 'Ext.data.Model',
        idProperty : 'qiId',//定义自己的主键
fields : [{
name : 'qiId',
type : 'int',
useNull : true
}, {
name : 'qtId',
type : 'int',
useNull : true
}, 'qiName', 'qiParents', 'qiNovitiate', 'qiTrainingTask']
});
6: 在使用tree的时候出现点击树节点出现等待的符号无法进入的原因是 后台返回的tree 节点的id 有重复导致。
7: grid 在tab 中显示,如果同一个grid 在tab 上出现了两次就会出现 第二个grid 的数据把前一个覆盖,这个是因为grid中使用的store是单例 的你创建的多个grid 但是却创建了一个store 所以就会导致第二个在tab上新增的grid 的数据会覆盖原先打开的grid的数据 var store=Ext.widget('deviceliststore'); 然后store:store
传统的store:'Ext.data.Store' 这样的写法在创建多个grid 的时候只会穿件一个store
8:打开多个tab标签页 图标显示问题除了第一个的图标其他的无法正常显示, tbar 中如果是button 请不要指定xtype属性就可以解决
9: 在使用grid 固定列的时候 不但要设定 {xtype:'rownumberer',header:'编号',width:40,locked:true },还要设定height 的属性,不然是不能正常使用的。
10: Extjs 中的组件最好不要设置ID 而设置Name 属性, 在 例如panel 的id:p1 , 在tabpanel 中应用的时候弹出多个tab 的时候就会出现id 冲突的问题,错误现象是显示会出现异常,在tabpanel 使用的时候会经常的出现id冲突的问题
例如 按钮的id 冲突会导致图片无法显示的问题,这里说的id 冲突并不是你定义了两个id 一样的组件,而是你定义一个id但是这个组件生成了多次。
11:关于 Tree 删除的问题,如何删除除了根节点以外所有的子节点??
Ext Tree 的root 也就是根节点非常重要,TreeStore 中有一个removeAll 方法是删除树的所有节点,但是一旦删除树的所有节点就无法对树进行操作了,所以在删除的时候经常都是保留根节点进行删除
tree.getStore().getRootNode( ).removeAll();
待续。。。。。。。。
12:在可编辑的grid 中使用combobox 控件的时候选择的dispalyValue renderer以后就成了 value ,处理方法
- var alarmStore=Ext.create("Ext.data.Store", {
 - fields: ["alarmStandardId", "standardName"],
 - proxy:{
 - type : 'ajax',
 - url : 'findAlarmStandardNameList.action',
 - pageParam:'pageNo',
 - //model:'Delta.model.config.devicemanage.DeviceModel',
 - reader : {
 - type:'json' ,
 - root:'alarmStandardNameList'
 - }
 - }
 - });
 - field: {
 - allowBlank: true,
 - xtype: 'combo',
 - name:'',
 - queryMode: 'remote',
 - store:alarmStore,
 - displayField:'standardName',
 - valueField:'alarmStandardId',
 - editable:false
 - } ,
 - renderer: function(value, metadata, record, rowIndex, columnIndex, store){
 - index = alarmStore.findExact('alarmStandardId',value);
 - if (index != -1){
 - rs = alarmStore.getAt(index).data;
 - return rs.standardName;
 - }
 - /*var index = store.find(buildingCombobox.valueField,value);
 - var r = store.getAt(index);
 - alert(r.data.buildingName);*/
 - //console.log(record);
 - return value;
 - }
 
var alarmStore=Ext.create("Ext.data.Store", {
						                fields: ["alarmStandardId", "standardName"],
					                 	proxy:{
									    	type : 'ajax',
											url : 'findAlarmStandardNameList.action',
											pageParam:'pageNo',
											//model:'Delta.model.config.devicemanage.DeviceModel',
											reader : {
												type:'json' ,
												root:'alarmStandardNameList'
											}
									    }
						            });
						field: { 
							        allowBlank: true,
							        xtype: 'combo',
							        name:'',
							        queryMode: 'remote',
							        store:alarmStore,
							        displayField:'standardName',
							        valueField:'alarmStandardId',
							        editable:false 
						    } ,
						   renderer: function(value, metadata, record, rowIndex, columnIndex, store){
						   		    index = alarmStore.findExact('alarmStandardId',value);
					                if (index != -1){
					                    rs = alarmStore.getAt(index).data;
					                    return rs.standardName;
					                }
					           	 /*var index = store.find(buildingCombobox.valueField,value);
					      		 var r = store.getAt(index);
					           	 alert(r.data.buildingName);*/
					           	 //console.log(record);
					           	 return value;
				                }
13:grid 中使用lock (固定表头) 下动态设置column 的show 和hide 方法, 在普通grid 下动态设定表头比较容易
只需要获取grid 的columns 然后设置 需要隐藏的列.columns[x].setVisible(false); 但是在使用固定表头的情况下这个方法就没法执行老是提示 no method 的就是错误,确实百撕不得骑姐,非常不正常,就在生成的js 的代码中看看什么状况吧,发现在属性plugins 中多了一些东西 其中有一个view 属性,在view属性中有找到了lockedGrid ,和normalGrid两个不同grid 呵呵知道是什么
原因了 原来固定表头其实是通过插件吧grid 分成了两个grid 真正的column 就隐藏在这两个grid中 grid.plugins[0].view.normalGrid.columns[6].setVisible(false); 呵呵搞定
14: 如何彻底隐藏列,一般开发者在使用隐藏列的时候都是hidde:true 用来隐藏列,但是这种隐藏列是不干净的,可以通过列下来在显示上,所以要想彻底隐藏列不但要设置 hidden 属性还要设置 hideable: false , 属性
15:ajax 提交返回结果中带有<per></per> ,解决方法 response.setContentType("text/html");
16、如果要允许复制Grid单元格内容,配置以下参数就可以viewConfig: {
            stripeRows: true
            ,enableTextSelection: true
        }
待续。。。。。。。。。。。。。。
原文:http://zha-zi.iteye.com/blog/1522631
extjs4 各种怪异问题的更多相关文章
- System中记录体函数命名怪异
		
//1019unit System; 中发现记录体函数命名怪异//乍一看,很怪异,其实是结构体里面 的变量后面直接写 函数类型了.不像传统先定义T***Event = procedure(S ...
 - padding标准盒模型和怪异盒子模型
		
我们都知道padding是为块级元素设置内边距 但是在使用过程中,我们却会遇到一些问题.padding的标准盒模型和怪异盒模型 padding盒子模型 我们通过demo来讲这个问题,用文字干讲第一没意 ...
 - ExtJs4之TreePanel
		
Tree介绍 树形结构,是程序开发,不可缺少的组件之一.ExtJs中的树,功能强大美观实用.功能齐全,拖拉,排序,异步加载等等. 在ExtJs4中Tree和Grid具有相同的父类,因此Grid具有的特 ...
 - ExtJs4  基础必备
		
认识ExtJs的开发包 下载路径:http://www.sencha.com/products/extjs/download/ 解压有20多兆,别怕,真正运行的没这么大.认识下这个包的文件结构吧. b ...
 - ExtJs4之Grid详细
		
ExtJs博客前奏 由于这段时间事情比较杂乱,博客就主要以项目中例子来说明编写. ExtJs4中的Grid非常强大,有展示,选中,搜索,排序,编辑,拖拽等基本功能,这篇博客我就这几个功能做写累述. 1 ...
 - ExtJS4 源码解析(一)带项目分析
		
Ext这个东东太大了,能看完就已经很不错了,完整的源码分析就不敢说了,大概就涉及了类管理,事件管理,数据结构缓存架构,UI组件核心机制,MVC这几个方面,只是挑着源码看的,没有实际完整的使用. 公司的 ...
 - 你所不了解的float(滥用float的怪异现象)
		
float设计初衷就是为了实现文字环绕效果 原本页面流布局显示如上图所示,运用了float属性后就显示为如下图所示,这就是浮动的设计初衷 float的一些特性:包裹性.破坏性. 包裹的特性其实主要有三 ...
 - Extjs4 -- Ext.loader命名空间的配置
		
初次使用extjs4的版本,在配置学习Ext.Loader()进行js文件的动态加载机制,由于各种原因导致多次失败,纠结2天,现将解决时出现的问题及需要注意事项进行记录 开发环境myeclipse8. ...
 - eclipse+spket+Extjs4.2.1开发环境搭建
		
一.开发工具配置 1.http://www.eclipse.org/downloads/下载Eclipse,解压. 2.http://spket.com/download.html ...
 
随机推荐
- sql 查询
			
select * from (select * ,row_number() over(partition by CreateUID order by asid)num from AuctionSell ...
 - Sql Server 日期格式化函数
			
Sql Server 中一个非常强大的日期格式化函数Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AMSelect CONVE ...
 - centos安装PHP服务器步骤
			
方法一.使用网友开发的EZHTTP程序包一键安装. 可以参考地址http://www.centos.bz/2013/08/ezhttp-tutorial/ http://www.cnblogs.com ...
 - PhpStorm 2016.3 For Mac 重大里程碑更新 -- 终于解决了不能输入中文标点符号的重大bug
			
PhpStorm 2016.3 For Mac 重大里程碑更新 1.[终于解决了]不能输入中文标点符号的重大bug,如 逗号“,”.“.”: 2.可以在一个窗体中,同时打开多个项目: 3.其他... ...
 - 【Alpha版本】 第三天  11.9
			
一.站立式会议照片: 二.项目燃尽图: 三.项目进展: 成 员 昨天完成任务 今天完成任务 明天要做任务 问题困难 心得体会 胡泽善 注册界面的实现 填写招聘时用户填写各个日期到可以使用工具方便选择日 ...
 - FBI阅人术——用最短的时间了解一个人
			
FBI阅人术--用最短的时间了解一个人 和陌生人第一次见面时,要如何在一开始谈话的几分钟内,了解这个人?如何和对方拉近距离?如何找到对方喜爱的话题?如何让对方愿意开口? 这都得依靠细心而入微的观察力, ...
 - IE 8 下的 box-sizing 和 min-* 属性
			
在非 IE 浏览器中,默认情况下 width 属性指的是内容区域(content)的宽度. IE 6+ 中,如果浏览器以标准模型渲染,和非 IE 浏览器的表现是一致的:如果浏览器以怪癖模式渲染,则 w ...
 - 报错mongoose.connection.db.collectionnames is not a function
			
mongoose.connection.db.collectionNames方法已经无效 建议使用mongoose.connection.db.listCollections()
 - 【krpano】二维码自动生成插件(源码+介绍+预览)
			
简介 在krpano生成的全景支持HTML5在手机中展示,而在手机中打开全景网址时不方便,需要输入网址. 最近研究了如何让krpano全景根据自己当前的网址,自动生成二维码,并在电脑浏览时,可以展示出 ...
 - CodeViz代码可视化
			
安装可以参见,http://blogimg.chinaunix.net/blog/upfile2/091119203927.pdf 结合pdf教程,这里说下注意事项: 1 ) 必须先安装GRAPHVI ...