PageRenderTime 42ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/pub/js/vendors/backbone/backbone-pcollection.js

https://github.com/oliver96/adsys
JavaScript | 104 lines | 100 code | 4 blank | 0 comment | 22 complexity | 0aca319576c514bfb8165f00e42c27d6 MD5 | raw file
  1. Backbone.PaginatedCollection = (function ( Backbone, _, $ ) {
  2. 'use strict';
  3. var PaginatedCollection = Backbone.Collection.extend({
  4. pageInfo: {
  5. totalPage: 0
  6. , page: 1
  7. , pageSize: 10
  8. , showFirst: true
  9. , showLast: true
  10. , showInfo: true
  11. }
  12. , queryOptions: {}
  13. , responseInfo: {}
  14. , sync: function ( method, model, options ) {
  15. if(!options.data) options.data = {};
  16. _.extend(options.data, this.pageInfo);
  17. this.queryOptions = options.data;
  18. options.type = 'POST'; // 以post进行提交
  19. return Backbone.sync.apply(this, [method, model, options]);
  20. }
  21. , parse: function(models, options) {
  22. if(this.model.localStorage || this.localStorage) {
  23. this.pageInfo.totalPage = Math.ceil(models.length / this.pageInfo.pageSize);
  24. if(this.pageInfo.totalPage < 0) {
  25. this.pageInfo.totalPage = 0;
  26. this.pageInfo.page = 1;
  27. }
  28. if(this.pageInfo.totalPage > 0 && this.pageInfo.page > this.pageInfo.totalPage) {
  29. this.pageInfo.page = this.pageInfo.totalPage;
  30. }
  31. var tmpModels = [],
  32. start = (this.pageInfo.page - 1) * this.pageInfo.pageSize,
  33. end = this.pageInfo.pageSize + start;
  34. if(models.length < end) {
  35. end = models.length;
  36. }
  37. for(var i = start; i < end; i ++) {
  38. if(typeof models[i] != 'undefined') {
  39. models[i]['__no__'] = i + 1;
  40. tmpModels.push(models[i]);
  41. }
  42. }
  43. return tmpModels;
  44. }
  45. else {
  46. this.pageInfo.totalPage = models.totalPage;
  47. for(var key in models) {
  48. if(key == 'data') continue;
  49. this.responseInfo[key] = models[key];
  50. }
  51. if(models.data) {
  52. return models.data;
  53. }
  54. else {
  55. return models;
  56. }
  57. }
  58. }
  59. , getInfo: function(key) {
  60. if(typeof this.responseInfo[key] != 'undefined') {
  61. return this.responseInfo[key];
  62. }
  63. return null;
  64. }
  65. , setPage: function(page) {
  66. this.pageInfo.page = page;
  67. }
  68. , firstPage: function() {
  69. this.setPage(1);
  70. this.fetch({data: this.queryOptions});
  71. }
  72. , lastPage: function() {
  73. this.setPage(this.pageInfo.totalPage);
  74. this.fetch({data: this.queryOptions});
  75. }
  76. , changePage: function(page) {
  77. if(page > 0 && page <= this.pageInfo.totalPage) {
  78. this.setPage(page);
  79. this.fetch({data: this.queryOptions});
  80. }
  81. }
  82. , prevPage: function() {
  83. var page = this.pageInfo.page - 1;
  84. if(page < 1) {
  85. page = 1;
  86. }
  87. this.setPage(page);
  88. this.fetch({data: this.queryOptions});
  89. }
  90. , nextPage: function() {
  91. var page = this.pageInfo.page + 1;
  92. if(page > this.pageInfo.totalPage) {
  93. page = this.pageInfo.totalPage;
  94. }
  95. this.setPage(page);
  96. this.fetch({data: this.queryOptions});
  97. }
  98. });
  99. return PaginatedCollection
  100. }( Backbone, _, jQuery ));