Ext 2.0使用:组件开发模式

Ext 2.0使用:组件开发模式
Ext 2.0中取消了组件的构造方法,你完全可以在initComponent中执行自己的构造逻辑。假如开发过
Asp.Net的控件,那么你应该比较熟悉这种开发模式。只要你了解Ext控件的各个方法的生命周期,调用模式,那么你可以随心所欲的继承和扩展Ext的组件,和开发自己的新的组件。
比如我们需要一个显示用户信息的Grid,那么在Ext 2.0中可以更加方便的实现。
以下代码是显示用户信息的GridPanel:
  1 /**/ /**
  2 * @author Terry
  3 */

  4
  5 EasyNet.UserGrid  =  Ext.extend(Ext.grid.GridPanel,  {
  6    serviceURL: '',
  7    loadMask: {
  8        msg: '加载用户信息'
  9    }
,
 10    viewConfig: {
 11        forceFit: true
 12    }
,
 13    
 14    initComponent: function(){
 15        var url = this.serviceURL;
 16        
 17        this.store = new Ext.data.Store({
 18            proxy: new Ext.data.HttpProxy({
 19                url: url + '/QueryUser'
 20            }
),
 21            baseParams: {
 22                fields: '*',
 23                filter: 'Status=1'
 24            }
,
 25            reader: new Ext.data.XmlReaderEx({
 26                root: 'User',
 27                totalRecords: 'Count',
 28                record: 'UserData',
 29                id: 'ID'
 30            }
, [
 31                {name: 'LoginName', mapping: 'LoginName'},
 32                {name: 'UserName', mapping: 'UserName'},
 33                {name: 'Sex', type: 'int', mapping: 'Sex'},
 34                {name: 'RegDate', type: 'date', format: 'Y-m-d', mapping: 'RegDate'}
 35            ])
 36        }
);
 37        
 38        this.cm = new Ext.grid.ColumnModel([{
 39            header: '登录名称',
 40            dataIndex: 'LoginName'
 41        }
,{
 42            header: '用户名称',
 43            dataIndex: 'UserName'
 44        }
{
 45            header: '用户姓名',
 46            dataIndex: 'UserName'
 47        }
{
 48            header: '性别', 
 49            dataIndex: 'Sex',
 50            renderer: function(v, params, data){
 51                if(v == 1){
 52                    return '男';
 53                }

 54                
 55                return '女';
 56            }

 57        }
{
 58            header: '注册时间', 
 59            dataIndex: 'RegDate'
 60        }
]);
 61        
 62        this.cm.defaultSortable = true;
 63        
 64        var searchBtn = new Ext.Button({
 65            text: '查找'
 66        }
);
 67        var delBtn = new Ext.Button({
 68            text: '删除'
 69        }
);
 70        
 71        searchBtn.on('click', this.onSearch, this);
 72        delBtn.on('click', this.onDelete, this);
 73        
 74        this.tbar = [searchBtn, delBtn];
 75        
 76        var store = this.store;
 77        
 78        this.bbar = new Ext.PagingToolbarEx({
 79            store: store,
 80            displayMsg: '显示用户信息 {0} - {1} / {2}',
 81            emptyMsg: '没有用户信息',
 82            paramNames: {
 83                start: 'pageIndex',
 84                limit: 'pageSize'
 85            }

 86        }
);
 87        
 88        EasyNet.UserGrid.superclass.initComponent.call(this);
 89    }
,
 90    
 91    loadData: function(){
 92        var params = Ext.util.JSON.decode(Ext.util.JSON.encode(this.store.baseParams));
 93        params.pageIndex = 1;
 94        params.pageSize = 20;
 95        this.store.load({params: params});
 96    }
,
 97    
 98    onSearch: function(){
 99        if(!this.searchWindow){
100            this.searchWindow = new EasyNet.SearchUserWindow({
101                searchTo:this
102            }
);
103        }

104        
105        this.searchWindow.show();
106    }
,
107    
108    onDelete: function(){
109        var sls = this.getSelections();
110        var count = sls.length;
111        
112        if(count == 0){
113            return;
114        }

115        
116        var surl = this.serviceURL;
117        var grid = this;
118        
119        Ext.Msg.show({
120            title: '确认删除用户',
121            msg: '确实要删除所选用户吗?',
122            buttons: Ext.Msg.YESNO,
123            icon: Ext.Msg.WARNING,
124            fn: function(btn, text){
125                if(btn == 'yes'){
126                    var filter = '';
127                    
128                    for(var i = 0; i < count; i ++){
129                        if(i == 0){
130                            filter = new String(sls[0].id);
131                        }

132                        else{
133                            filter = filter + ',' + sls[i].id;
134                        }

135                    }

136                    
137                    var store = new Ext.data.Store({
138                        proxy: new Ext.data.HttpProxy({
139                            url: surl + '/DeleteUser'
140                        }
)
141                    }
);
142                                
143                    store.load({params: {filter: 'ID IN(' + filter +')'}});
144                    grid.loadData();
145                }

146            }

147        }
);
148    }

149}
);
150
151 Ext.reg('easynetusergrid', EasyNet.UserGrid);

以下是查找用户对话窗体:
  1 /**/ /**
  2 * @author Terry
  3 */

  4
  5 EasyNet.SearchUserWindow  =  Ext.extend(Ext.Window,  {
  6    width: 350,
  7    height: 250,
  8       resizable: false,
  9    layout: 'form',
 10    plain: true,
 11    bodyStyle: 'padding:5px;',
 12    buttonAlign: 'right',
 13    modal:true,
 14    title: '查找用户',
 15    closeAction: 'hide',
 16    buttons: [{
 17        text: '确定'
 18    }
{
 19        text: '取消'
 20    }
],
 21    
 22    initComponent: function(){
 23        this.items = [{
 24            layout: 'column',
 25            baseCls: 'x-plain',
 26            items: [{
 27                columnWidth:0.08,
 28                layout: 'form',
 29                baseCls: 'x-plain',
 30                items: [{
 31                    hideLabel: true,
 32                    xtype: 'checkbox',
 33                    name: 'ckLoginName'
 34                }
{
 35                    hideLabel: true,
 36                    xtype: 'checkbox',
 37                    name: 'ckUserName'
 38                }
{
 39                    hideLabel: true,
 40                    xtype: 'checkbox',
 41                    name: 'ckDate'
 42                }
]
 43            }
{
 44                columnWidth: 0.8,
 45                layout: 'form',
 46                baseCls: 'x-plain',
 47                items: [{
 48                    xtype: 'textfield',
 49                    fieldLabel: '登录名称',
 50                    emptyText: '登录名称',
 51                    maxLength: 50,
 52                    name: 'loginName'
 53                }
{
 54                    xtype: 'textfield',
 55                    fieldLabel: '用户名称',
 56                    emptyText: '用户名称',
 57                    maxLength: 50,
 58                    name: 'userName'
 59                }
{
 60                    xtype: 'datefield',
 61                    fieldLabel: '起始时间',
 62                    emptyText: '年--日',
 63                    format: 'Y-m-d',
 64                    width: 130,
 65                    name: 'bDate'
 66                }
{
 67                    xtype: 'datefield',
 68                    fieldLabel: '起始时间',
 69                    emptyText: '年--日',
 70                    format: 'Y-m-d',
 71                    width: 130,
 72                    name: 'eDate'
 73                }
]
 74            }
]
 75        }
];
 76        
 77        Easy.SearchUserWindow.superclass.initComponent.call(this);
 78    }
,
 79    
 80    onRender: function(ct, position){
 81        EasyNet.SearchUserWindow.superclass.onRender.call(this, ct, position);
 82        this.buttons[0].on('click', this.onSearch, this);
 83        this.buttons[1].on('click', this.onCancel, this);
 84        
 85    }
,
 86    
 87    onSearch: function(){
 88        this.loadData();
 89    }
,
 90    
 91    onCancel: function(){
 92        if(this.closeAction == 'hide'){
 93            this.hide();
 94        }

 95        else if(this.closeAction == 'close'){
 96            this.close();
 97        }

 98    }
,
 99    
100    getValue: function(){
101        return {
102            ckLoginName: this.find('name', 'ckLoginName')[0].getValue(),
103            ckUserName: this.find('name', 'ckUserName')[0].getValue(),
104            loginName: this.find('name', 'loginName')[0].getValue(),
105            userName: this.find('name', 'userName')[0].getValue(),
106            bDate: this.find('name', 'bDate')[0].getValue(),
107            eDate: this.find('name', 'eDate')[0].getValue()
108        }

109    }
,
110    
111    getCondition: function(){
112        var o = this.getValue();
113        var filter ='Status=1';
114        
115        if(o.ckLoginName && o.LoginName != ''){
116            filter += String.format(' AND LoginName LIKE \'%{0}%\'', o.loginName);
117        }

118        if(o.ckUserName && o.userName != ''){
119            filter += String.format(' AND UserName LIKE \'%{0}%\'', o.userName);
120        }

121        if(o.ckDate && o.bDate != '' && o.eDate != '' && o.eDate >= o.bDate){
122            filter += String.format(' AND RegDate BETWEEN \'{0}\' AND \'{1}\'', o.bDate, o.eDate);
123        }

124        
125        return {
126            fields: '*',
127            filter: filter
128        }

129    }
,
130    
131    loadData: function(){
132        if(this.searchTo){
133            this.searchTo.store.baseParams = this.getCondition();
134            this.searchTo.loadData();
135        }

136        
137        this.onCancel();
138    }

139}
);

在实际应用中所有数据调用.Net写的Web Service取得。

你可能感兴趣的:(Ext 2.0使用:组件开发模式)