ExtJs 下拉菜单分页工具插件 代码分析


 1 Ext.ns("Ext.ux");
 2 //创建插件对象
 3 Ext.ux.PageSizePlugin = function(){
 4         //调用父对象的构造方法,并为此插件生成一个预定义store的下拉菜单
 5         Ext.ux.PageSizePlugin.superclass.constructor.call(this,{
 6             store : new Ext.data.SimpleStore({
 7                 fields : ['text','value'],
 8                 data : [['10',10],['20',20],['30',30],['40',40],['50',50]]
 9             }),
10             mode : 'local' ,
11             displayField : 'text' ,
12             valueField : 'value' ,
13             editable : false ,
14             allowBlank : false ,
15             triggerAction : 'all' ,
16             width : 60
17         })
18 }
19 //插件继承ComboBox
20 Ext.extend(Ext.ux.PageSizePlugin ,Ext.form.ComboBox ,{
21         //插件必须调用的方法(或者说插件唯一自动调用的方法)
22         init : function(paging){//paging是PageSizePlugin插件所在组件的对象(PaggingToolbar)
23             paging.on('render',this.onInitView,this);//为PaggingToolbar定义渲染之后调用的方法,以及指定该方法的作用域为ComboBox
24         },
25         onInitView : function(paging){
26             paging.add('-',
27                 this ,
28                 '条/页'
29             );
30             this.setValue(paging.pageSize);//设置ComboBox的值
31             this.on('select',this.onPageSizeChanged,paging);//为ComboBox定义选择下拉菜单后调用的方法,以及指定该方法的作用域为PaggingToolbar
32         },
33         onPageSizeChanged : function(combo){
34             this.pageSize = parseInt(combo.getValue());
35             //compage = parseInt(combo.getValue());
36         
37             this.doLoad(0);//PaggingToolbar调用私有方法加载数据,参数0为start
38         }
39 })
40 
41 //一点思考:调用父对象的构造方法 完全可以写在init方法的第一行,这样写不容易打断自己的思路,然而这样写会显得比较乱,代码不清晰。
42 //从代码执行顺序上考虑:插件所在的组件找到这个插件后,会先创建插件对象并继承父对象,然后再调用插件的init方法

 

posted @ 2015-07-07 10:09  独特之最  阅读(1049)  评论(0编辑  收藏  举报