浏览代码

Improve the flat extension

Added flatSeparator options and the code is more clear
Dennis Hernández 10 年之前
父节点
当前提交
71e75627e6

+ 6 - 0
src/extensions/flat-json/README.md

@@ -15,3 +15,9 @@ Use Plugin: [bootstrap-table-flat-json](https://github.com/djhvscf/bootstrap-tab
 * type: Boolean
 * description: Set true to flat the JSON object.
 * default: `false`
+
+### flatSeparator
+
+* type: String
+* description: Set the default separator between object levels.
+* default: `.`

+ 43 - 51
src/extensions/flat-json/bootstrap-table-flat-json.js

@@ -1,70 +1,62 @@
 /**
  * @author: Dennis Hernández
  * @webSite: http://djhvscf.github.io/Blog
- * @version: v1.2.0
+ * @version: v1.3.0
  */
 
-
 (function ($) {
     'use strict';
 
+    var flat = function (element, that) {
+        var result = {};
+
+        function recurse(cur, prop) {
+            if (Object(cur) !== cur) {
+                result[prop] = cur;
+            } else if ($.isArray(cur)) {
+                for (var i = 0, l = cur.length; i < l; i++) {
+                    recurse(cur[i], prop ? prop + that.options.flatSeparator + i : "" + i);
+                    if (l == 0) {
+                        result[prop] = [];
+                    }
+                }
+            } else {
+                var isEmpty = true;
+                for (var p in cur) {
+                    isEmpty = false;
+                    recurse(cur[p], prop ? prop + that.options.flatSeparator + p : p);
+                }
+                if (isEmpty) {
+                    result[prop] = {};
+                }
+            }
+        }
+
+        recurse(element, "");
+        return result;
+    };
+
+    var flatHelper = function (data, that) {
+        var flatArray = [];
+
+        $.each(!$.isArray(data) ? [data] : data, function (i, element) {
+            flatArray.push(flat(element, that));
+        });
+        return flatArray;
+    };
+
     $.extend($.fn.bootstrapTable.defaults, {
-        flat: false
+        flat: false,
+        flatSeparator: '.'
     });
 
     var BootstrapTable = $.fn.bootstrapTable.Constructor,
         _initData = BootstrapTable.prototype.initData;
 
     BootstrapTable.prototype.initData = function (data, type) {
-        if( this.options.flat ){
-            data = data === undefined ? this.options.data : data;
-            data = sd.flatHelper(data);
+        if (this.options.flat) {
+            data = flatHelper(data ? data : this.options.data, this);
         }
         _initData.apply(this, [data, type]);
     };
-
-    //Main functions
-    var sd = {
-        flat: function (element) {
-            var result = {};
-
-            function recurse(cur, prop) {
-                if (Object(cur) !== cur) {
-                    result[prop] = cur;
-                } else if ($.isArray(cur)) {
-                    for (var i = 0, l = cur.length; i < l; i++) {
-                        recurse(cur[i], prop ? prop + "." + i : "" + i);
-                        if (l == 0) {
-                            result[prop] = [];
-                        }
-                    }
-                } else {
-                    var isEmpty = true;
-                    for (var p in cur) {
-                        isEmpty = false;
-                        recurse(cur[p], prop ? prop + "." + p : p);
-                    }
-                    if (isEmpty) {
-                        result[prop] = {};
-                    }
-                }
-            }
-
-            recurse(element, "");
-            return result;
-        },
-
-        flatHelper: function (data) {
-            var flatArray = [],
-                arrayHelper = [];
-            if (!$.isArray(data)) {
-                arrayHelper.push(data);
-                data = arrayHelper;
-            }
-            $.each(data, function (i, element) {
-                flatArray.push(sd.flat(element));
-            });
-            return flatArray;
-        }
-    };
 })(jQuery);

+ 0 - 1
src/extensions/key-events/bootstrap-table-key-events.js

@@ -19,7 +19,6 @@
 
     BootstrapTable.prototype.init = function () {
         _init.apply(this, Array.prototype.slice.apply(arguments));
-
         this.initKeyEvents();
     };