刚接触ExtJs的时候,由于用C#做Web项目,分页方法一般是传入当前页PageIndex和每页显示记录数PageSize获取数据,所以修改了ExtJs本身的PagingToolbar用于适应这种情况。贴出代码如下:
1
/**
2
* @author Terry
3
*/
4
5
Ext.ux.PagingToolbar = Ext.extend(Ext.PagingToolbar, {
6
afterPageText: '/ {0}',
7
beforePageText: '页',
8
displayInfo: true,
9
displayMsg: '当前显示 {0} - {1}条记录 /共 {2}条记录',
10
emptyMsg: '无显示数据',
11
firstText: '第一页',
12
prevText: '前一页',
13
nextText: '后一页',
14
lastText: '最后一页',
15
refreshText: '刷新',
16
pageSize: 50,
17
paramNames: {
18
start: 'pageIndex',
19
limit: 'pageSize'
20
},
21
22
updateInfo: function() {
23
if (this.displayEl) {
24
var count = this.store.getCount();
25
26
var msg = count == 0 ? this.emptyMsg : String.format(this.displayMsg, this.cursor, this.cursor + count - 1, this.store.getTotalCount());
27
28
this.displayEl.update(msg);
29
}
30
},
31
32
onLoad: function(store, r, o) {
33
if (!this.rendered) {
34
this.dsLoaded = [store, r, o];
35
36
return;
37
}
38
39
if (!o.params || this.store.getTotalCount() == 0) {
40
this.cursor = 0;
41
}
42
else {
43
this.cursor = (o.params[this.paramNames.start] - 1) * this.pageSize + 1;
44
}
45
46
var d = this.getPageData(), ap = d.activePage, ps = d.pages;
47
48
this.afterTextEl.el.innerHTML = String.format(this.afterPageText, d.pages);
49
this.field.dom.value = ap;
50
51
this.first.setDisabled(ap == 1 || ps == 0);
52
this.prev.setDisabled(ap == 1 || ps == 0);
53
this.next.setDisabled(ap == ps || ps == 0);
54
this.last.setDisabled(ap == ps || ps == 0);
55
this.loading.enable();
56
this.loading.setDisabled(ps == 0);
57
this.updateInfo();
58
},
59
60
getPageData: function() {
61
var total = this.store.getTotalCount();
62
63
return {
64
total: total,
65
activePage: total != 0 && this.cursor == 0 ? 1 : Math.ceil(this.cursor / this.pageSize),
66
pages: total != 0 && total < this.pageSize ? 1 : Math.ceil(total / this.pageSize)
67
}
68
},
69
70
onClick: function(which) {
71
var store = this.store;
72
var d = this.getPageData();
73
74
switch (which) {
75
case 'first':
76
this.doLoad(1);
77
break;
78
case 'prev':
79
this.doLoad(Math.max(1, d.activePage - 1));
80
break;
81
case 'next':
82
this.doLoad(Math.min(d.pages, d.activePage + 1));
83
break;
84
case 'last':
85
this.doLoad(d.pages);
86
break;
87
case 'refresh':
88
this.doLoad(d.activePage);
89
break;
90
}
91
},
92
93
onPagingKeydown: function(e) {
94
var k = e.getKey(), d = this.getPageData(), pageNum;
95
96
if (k == e.RETURN) {
97
e.stopEvent();
98
99
pageNum = this.readPage(d)
100
101
if (pageNum >= d.pages) {
102
pageNum = d.pages;
103
}
104
else if (pageNum <= 1) {
105
pageNum = 1;
106
}
107
108
this.doLoad(pageNum);
109
110
}
111
else if (k == e.HOME || k == e.END) {
112
e.stopEvent();
113
pageNum = k == e.HOME ? 1 : d.pages;
114
this.field.dom.value = pageNum;
115
}
116
else if (k == e.UP || k == e.PAGEUP || k == e.DOWN || k == e.PAGEDOWN) {
117
e.stopEvent();
118
119
if (pageNum = this.readPage(d)) {
120
var increment = e.shiftKey ? 10 : 1;
121
122
if (k == e.DOWN || k == e.PAGEDOWN) {
123
increment *= -1;
124
}
125
126
pageNum += increment;
127
128
if (pageNum >= 1 & pageNum <= d.pages) {
129
this.field.dom.value = pageNum;
130
}
131
}
132
}
133
}
134
});
135
136
Ext.reg('ux.pagingtoolbar', Ext.ux.PagingToolbar);

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136
