存档: ‘Extjs’ 分类

Ext读取xml文件生成动态表格和表单(续)

没有评论 2012年1月31日

很多人向我要《Ext读取xml文件生成动态表格和表单》一文的源代码,故花了些时间将源代码整理出来,并重新编写此文,分享当时的技术思路。

《Ext读取xml文件生成动态表格和表单》一文需要的文件有:
1.html文件,此处以SASC.search.MtrUse.html为例
2.Extjs相关文件,见SASC.search.MtrUse.html文件中的引用
3.工具类,DomUtils.js
4.核心js类:SASC.extjs.search.MtrUse.js
5.java代码

详细html和js代码见相关文件,这里先描述思路。

首先
通过一个事件打开一个弹出窗口,该窗口的url指向SASC.search.MtrUse.html文件,并附带参数xmlFile,xmlFile的值为xml文件名称,其存于服务器的某一路径下面。如:“../SASC.search.MtrUse.html?xmlFile=PC_MTRREPLACE_IMP.xml” .PC_MTRREPLACE_IMP.xml文件的放置路径见DomUtils.js文件中的说明。

在这里,前台会读取该xml生成ext界面,后天会从xml文件读取sql语句等信息,详细信息见java代码。
进入SASC.search.MtrUse.html页面,执行ext的初始化方法时,会先通过当前页面的url中获取xmlFile参数的值(调用getForwardXmlUrl(getQsValue(‘xmlFile’))),得到xml文件的服务器路径,然后通过javascript的解析该xml文件,渲染出ext界面,这部分代码见SASC.extjs.search.MtrUse.js文件内的initStoreData(xmlObj) 方法。
需要说明的是,xml文件是按照一定规律编写的,详细的参考xml文件内容,以及解析xml文件的相关方法。你可以重新定义该xml的结构,然后修改解析xml文件的方法。

然后

初始化完ext界面之后,会获取表格数据,这部分使用了struts,这不是本文重点,故不做介绍。

最后
相关文件打包见:
http://vdisk.weibo.com/s/2enQS

说明
如果还有什么不懂,欢迎email:javachen.june#gmail.com

Ext.util.Event

没有评论 2010年3月5日

还就没有写关于Ext的文章了,可还是有不少人搜索Ext搜索到我的文章里来了。最近,在看Python语言和Android开发,没怎么接触Ext了,哎!真希望一天时间当两天用!

Ext.util.Event对象构建器需要传入两个对象:obj(处理事件的缺省对象),name(事件名称)。在构建Event对象时,Event对象会同时构建一个事件的处理函数的数组:listeners,通过这个数组实现了一个事件的多个事件句柄函数的处理。 继续阅读…

用ExtJs制作登陆界面

2 条评论 2010年2月25日

第一步引入ExtJs文件及相关js文件:

<script src=”extjs/adapter/ext/ext-base.js” type=”text/javascript”></script> <script src=”extjs/ext-all-debug.js” type=”text/javascript”></script>
<script src=”extjs/ext-lang-zh_CN.js” type=”text/javascript”></script> <script src=”javascript/CheckCode.js” type=”text/javascript”></script>
<script src=”javascript/FullScreen.js” type=”text/javascript”></script> <script src=”javascript/Login.js” type=”text/javascript”></script>

继续阅读…

Ext.apply 与 Ext.applyIf

没有评论 2010年2月1日

Ext.apply是整个ExtJs框架当中很重要的一个方法,Ext是一个对象,也可以说是一个Ext命名空间,在Extjs 3.0 ext-base.js中,Ext是如下定义的:
Ext = {
version : ’3.0′
};

该对象初始化时有个version 属性,标注ExtJs框架的版本号。
继续阅读…

Ext grid改变行背景颜色

1条评论 2010年1月10日

Ext grid显示的行记录背景颜色都是一样的,这样不容易区分不同行的颜色、方便用户区分不同的记录。
改变单元格背景颜色的方法有几种,由简单的说起吧!
第一种情况:加载数据时改变列的颜色。这种方式是通过Ext.grid.ColumnModel中某一列的renderer 函数来实现的。
首先定义一个样式如下:
.x-grid-record-gray{
background: #c3daf9;
}


定义改变颜色的列,加上renderer 渲染函数:
{header:’摘要’,dataIndex:’zhaoyao’,align:’left’,width:150,
renderer : function(value, m){
m.css=’x-grid-record-gray’;
return value;
}
}

第二种情况:加载数据完成后改变行的颜色
首先要解决的一个问题是如果判断数据已经加载完毕,最简单的方法是给grid的store添加onload事件。
如果你想有条件地改变某行的背景颜色,则还需要遍历gird的store,这里有个简单的方法即store的
each方法。看下面这个例子:
grid.getStore().addListener(‘load’,handleGridLoadEvent);
function handleGridLoadEvent(store,records) {
var girdcount=0;
store.each(function(r){
if(r.get(‘STORESUSEDQTY’)==0){
grid.getView().getRow(girdcount).style.backgroundColor=’#c3daf9′;
}
girdcount=girdcount+1;
});
}

第三种情况:使用Ext本身的颜色渲染效果
在grid中配置stripeRows为true,可以实现隔行变色,但不能达到根据不同记录集实现不同颜色的显示效果.

说完上面常见的几种方法之后,在来结合项目中的需求来实现背景颜色变色。现在项目中的Ext grid表格是三方公司用代码更具配置文件动态生成的,其代码都封装了一个动态命名的命名空间里,JavaScript代码写在了页面上。我只能在这个Ext grid代码生成之后获得一个grid引用。
下面是部分代码:
Ext.namespace(‘BO_PC_REQUIRE_S’);
BO_PC_REQUIRE_S.Grid=function(){
currentRowInd=0;
currentColInd=0;
var AWS_GRID_CHECK;
var AWS_FORM;
var AWS_GRID_DS_PLANT;
var AWS_GRID_DS;
var AWS_GRID_CM;
var AWS_GRID_PANEL;

return {
perPage: 50,
currentRowInd:0,
currentColInd:0,
init : function(){

},
getDataSource: function() {
return AWS_GRID_DS;
},
getGridPanel: function() {
return AWS_GRID_PANEL;
},
getCurrentRowInd: function() {
return currentRowInd;
},
getCurrentColInd: function() {
return currentColInd;
},
getTitle: function(){
return ‘采购需求单子表(设计师)’;
},
saveData: function(){
if(typeof(outerDoSaveGrid)==’function’){return outerDoSaveGrid();}
},
setCellValue: function(f,v,r){
var rowInd=currentRowInd;
if(r!=undefined)rowInd=r;
AWS_GRID_DS.getAt(rowInd).set(f,v);
},
getCellValue: function(f,r){
var rowInd=currentRowInd;
if(r!=undefined)rowInd=r;
return AWS_GRID_DS.getAt(rowInd).get(f);
}
}//End return
});

参考上门说的三种方法,第一种不可实现,第二种可以实现,但存在一些问题:数据加载完之后,达到不同行显示不同背景色的目的,但是当你单击表头进行排序的时候,表格内的所有行背景颜色又都回到了默认颜色,让人烦恼!这时候想想,我可不可以重写表头的事件,使执行这些事件的时候,也是行背景变色呢?实现代码如下:
BO_PC_REQUIRE_S.Grid.getGridPanel().getStore().addListener(‘load’,
handleGridLoadEvent);
function handleGridLoadEvent(store,records) {
var girdcount=0;
store.each(function(r){
if(r.get(‘STORESUSEDQTY’)==0){
BO_PC_REQUIRE_S.Grid.getGridPanel().getView().getRow(girdcount).style.backgroundColor=’#c3daf9′;
}
girdcount=girdcount+1;
});
}

BO_PC_REQUIRE_S.Grid.getGridPanel().addListener(‘headerclick’,
function(){
var girdcount=0;
BO_PC_REQUIRE_S.Grid.getDataSource().each(function(r){
if(r.get(‘STORESUSEDQTY’)==0){
BO_PC_REQUIRE_S.Grid.getGridPanel().getView().getRow(girdcount).style.backgroundColor=’#c3daf9′;
}
girdcount=girdcount+1;
});
});

BO_PC_REQUIRE_S.Grid.getGridPanel().addListener(‘headermousedown’, function(){});

这样做又有了问题,表格排序事件不起作用了,有没有更好的解决办法呢?看看API,grid里有个视图,通过改变视图里的getRowClass方法,可以实现行跨多列显示、单行内显示多行内容等等效果。可不可以参照这个思路,通过改变css实现行背景换色呢?
代码如下:
BO_PC_REQUIRE_S.Grid.getGridPanel().getView().getRowClass=function(record,rowIndex,rowParams,store){
if(record.data.STORESUSEDQTY==0){
return ‘x-grid-record-gray’;
}else{
return ”;
}};

extjs换肤

没有评论 2009年12月18日

1.直接添加其他css文件换肤.
皮肤文件:xtheme-olive.zip下载
把皮肤文件解压,把css文件(如xtheme-olive.css)拷贝到extjs的resources目录下css文件夹里面:

解压皮肤文件,把里面的相应的 image文件夹下的目录(比如olive)拷贝到extjs的resources目录下images文件夹下

继续阅读…