ExtJS创建Store的两种方式
//NO.1
var MemberShipStores = Ext.extend(Ext.data.Store,{
proxy: new Ext.data.HttpProxy({
type:'ajax',
url:'/lmp/memberShip/memberShipCustomer.do',
reader:{
type:'json',
root:"membership"
}
}),model:'memberShipModels'
});
//NO.2
var MemberShipStores = new Ext.data.JsonStore({
proxy :{
type:'ajax',
url:'/lmp/memberShip/memberShipCustomer.do',
reader:{
type:'json',
root:"membership"
}
},model:'memberShipModels'
});
很显然这两种方式创建出来的数据虽然都可以拿到,但是在使用过程中会遇到一些问题比如第二种创建方式,如果MemberShipStores.load()之后,引用该store的所有控件的值,因为这仅仅是创建了一个对象,多个控件共用一个store。下面就说一下我用gridPanel时所出现的问题,可能因为自己不会表达问题,百度了很久也没有个确切的答案,不多说了,先上图:
一个tabPanel页面
问题:点数记录里面是一个gridPanel,当我想查看两个用户的点数记录的时候就出现了问题,出现问题时,我绑定的store使用的第二种方法创建的,就会导致,当第一个界面里面的store改变之后,第二个界面也会跟着第一个改变,很显然,它们两个共用了一个store才导致这样的错误结果。
解决方案
上面我们用了两种不同的方法创建的store,确切的来说,这两种方法一个是定义,一个是创建
第一种方法则是定义了一个类,通过这个类可以创建不同的对象,第二种方法则是创建了一个对象,一个对象存放一组数据供给我们的表格使用,所以会出现问题,而使用第一种时,绑定store时就可以new MemberShipStores();
var memberShipStores =new MemberShipStores();
var customerGrid = Ext.create('Ext.grid.Panel', {
id:'customerGrid'+row.get('customerId'),
width : 798,
height : 463,
autoScroll : true,
border : false,
buttonAlign : 'right',
store:memberShipStores,
columns : [ {
header : '會員等級',
dataIndex : 'type',
width : 120,
sortable : true,
align : 'center',
renderer:CustomerTypeConvert
}, {
header : '會員開始日',
dataIndex : 'startDate',
width : 120,
sortable : true,
align : 'center'
}
}
使用第一种的方式的话,每打开一个gridPanel就会有一个独立的对象去进行操作,这样就不会造成页面紊乱了。