bootstrap-table-treegrid.js 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /**
  2. * @author: YL
  3. * @version: v1.0.0
  4. */
  5. !function ($) {
  6. 'use strict';
  7. $.extend($.fn.bootstrapTable.defaults, {
  8. treeShowField: null,
  9. idField: 'id',
  10. parentIdField: 'pid',
  11. onGetNodes: function (row, data) {
  12. var that = this;
  13. var nodes = [];
  14. $.each(data, function (i, item) {
  15. if (row[that.options.idField] === item[that.options.parentIdField]) {
  16. nodes.push(item);
  17. }
  18. });
  19. return nodes;
  20. },
  21. onCheckRoot: function (row, data) {
  22. var that = this;
  23. return !row[that.options.parentIdField];
  24. }
  25. });
  26. var BootstrapTable = $.fn.bootstrapTable.Constructor,
  27. _initRow = BootstrapTable.prototype.initRow,
  28. _initHeader = BootstrapTable.prototype.initHeader;
  29. // td
  30. BootstrapTable.prototype.initHeader = function () {
  31. var that = this;
  32. _initHeader.apply(that, Array.prototype.slice.apply(arguments));
  33. var treeShowField = that.options.treeShowField;
  34. if (treeShowField) {
  35. $.each(this.header.fields, function (i, field) {
  36. if (treeShowField === field) {
  37. that.treeEnable = true;
  38. return false;
  39. }
  40. });
  41. }
  42. };
  43. var initTr = function (item, idx, data, parentDom) {
  44. var that = this;
  45. var nodes = that.options.onGetNodes.apply(that, [item, data]);
  46. item._nodes = nodes;
  47. parentDom.append(_initRow.apply(that, [item, idx, data, parentDom]));
  48. // init sub node
  49. var len = nodes.length - 1;
  50. for (var i = 0; i <= len; i++) {
  51. var node = nodes[i];
  52. node._level = item._level + 1;
  53. node._parent = item;
  54. if (i === len)
  55. node._last = 1;
  56. // jquery.treegrid.js
  57. that.options.rowStyle = function (item, idx) {
  58. var id = item[that.options.idField] ? item[that.options.idField] : 0;
  59. var pid = item[that.options.parentIdField] ? item[that.options.parentIdField] : 0;
  60. return {
  61. classes: 'treegrid-' + id + ' treegrid-parent-' + pid
  62. };
  63. };
  64. initTr.apply(that, [node, $.inArray(node, data), data, parentDom]);
  65. }
  66. };
  67. // tr
  68. BootstrapTable.prototype.initRow = function (item, idx, data, parentDom) {
  69. var that = this;
  70. if (that.treeEnable) {
  71. // init root node
  72. if (that.options.onCheckRoot.apply(that, [item, data])) {
  73. if (item._level === undefined) {
  74. item._level = 0;
  75. }
  76. // jquery.treegrid.js
  77. that.options.rowStyle = function (item, idx) {
  78. var x = item[that.options.idField] ? item[that.options.idField] : 0;
  79. return {
  80. classes: 'treegrid-' + x
  81. };
  82. };
  83. initTr.apply(that, [item, idx, data, parentDom]);
  84. return true;
  85. }
  86. return false;
  87. }
  88. return _initRow.apply(that, Array.prototype.slice.apply(arguments));
  89. };
  90. }(jQuery);