![]()
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方法