ソースを参照

Adding support for IE < 9 and old browsers

Dennis Hernández 10 年 前
コミット
4b96b04b93
1 ファイル変更42 行追加14 行削除
  1. 42 14
      src/extensions/group-by/bootstrap-table-group-by.js

+ 42 - 14
src/extensions/group-by/bootstrap-table-group-by.js

@@ -8,28 +8,56 @@
 
     'use strict';
 
-   var groupBy = function ( array , f ) {
-        var groups = {};
-        array.forEach( function( o )
-        {
-            var group = JSON.stringify( f(o) );
-            groups[group] = groups[group] || [];
-            groups[group].push( o );
-        });
-        return Object.keys(groups).map( function( group )
-        {
+    var setObjectKeys = function () {
+        // From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
+       Object.keys = function(o) {
+           if (o !== Object(o)) {
+               throw new TypeError('Object.keys called on a non-object');
+           }
+           var k=[],p;
+           for (p in o) {
+               if (Object.prototype.hasOwnProperty.call(o,p)) {
+                   k.push(p);
+               }
+           }
+           return k;
+       }
+    };
+
+   var groupBy = function (array , f) {
+       var groups = {};
+       array.forEach( function(o) {
+           var group = JSON.stringify(f(o));
+           groups[group] = groups[group] || [];
+           groups[group].push(o);
+       });
+       return Object.keys(groups).map(function (group) {
             return groups[group];
-        });
+       });
     };
 
     $.extend($.fn.bootstrapTable.defaults, {
         groupBy: false,
-        groupByName: ''
+        groupByField: ''
     });
 
     var BootstrapTable = $.fn.bootstrapTable.Constructor,
+        _init = BootstrapTable.prototype.init,
         _initData = BootstrapTable.prototype.initData;
 
+    BootstrapTable.prototype.init = function () {
+        _init.apply(this, Array.prototype.slice.apply(arguments));
+
+        /*if (!this.options.groupBy) {
+            return;
+        }*/
+
+        // Compatibility: IE < 9 and old browsers
+        if (!Object.keys) {
+            setObjectKeys();
+        }
+    };
+
     BootstrapTable.prototype.initData = function () {
         _initData.apply(this, Array.prototype.slice.apply(arguments));
 
@@ -39,10 +67,10 @@
 
         var that = this;
         //**TESTING**
-        this.options.groupByName = 'name';
+        this.options.groupByField = 'name';
         console.log(this.options.data);
         var result = groupBy(this.options.data, function(item) {
-            return [item[that.options.groupByName]];
+            return [item[that.options.groupByField]];
         });
         console.log(result);
         //**TESTING**