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方法