浏览代码

Replace get field index by hash table (#2679)

fix(js): replace get field index by hash table
* Add missing change in extensions
yenyen 8 年之前
父节点
当前提交
c349146fe3

+ 8 - 20
src/bootstrap-table.js

@@ -41,20 +41,7 @@
         });
         });
         return result;
         return result;
     };
     };
-
-    var getFieldIndex = function (columns, field) {
-        var index = -1;
-
-        $.each(columns, function (i, column) {
-            if (column.field === field) {
-                index = i;
-                return false;
-            }
-            return true;
-        });
-        return index;
-    };
-
+    
     // http://jsfiddle.net/wenyi/47nz7ez9/3/
     // http://jsfiddle.net/wenyi/47nz7ez9/3/
     var setFieldIndex = function (columns) {
     var setFieldIndex = function (columns) {
         var i, j, k,
         var i, j, k,
@@ -671,6 +658,7 @@
         }
         }
         this.options.columns = $.extend(true, [], columns, this.options.columns);
         this.options.columns = $.extend(true, [], columns, this.options.columns);
         this.columns = [];
         this.columns = [];
+        this.fieldsColumnsIndex = [];
 
 
         setFieldIndex(this.options.columns);
         setFieldIndex(this.options.columns);
         $.each(this.options.columns, function (i, columns) {
         $.each(this.options.columns, function (i, columns) {
@@ -679,6 +667,7 @@
 
 
                 if (typeof column.fieldIndex !== 'undefined') {
                 if (typeof column.fieldIndex !== 'undefined') {
                     that.columns[column.fieldIndex] = column;
                     that.columns[column.fieldIndex] = column;
+                    that.fieldsColumnsIndex[column.field] = column.fieldIndex;
                 }
                 }
 
 
                 that.options.columns[i][j] = column;
                 that.options.columns[i][j] = column;
@@ -1268,7 +1257,7 @@
                     }
                     }
 
 
                     var key = $.isNumeric(that.header.fields[j]) ? parseInt(that.header.fields[j], 10) : that.header.fields[j];
                     var key = $.isNumeric(that.header.fields[j]) ? parseInt(that.header.fields[j], 10) : that.header.fields[j];
-                    var column = that.columns[getFieldIndex(that.columns, key)];
+                    var column = that.columns[that.fieldsColumnsIndex[key]];
                     var value;
                     var value;
 
 
                     if (typeof key === 'string') {
                     if (typeof key === 'string') {
@@ -1861,7 +1850,7 @@
                 index = $td[0].cellIndex,
                 index = $td[0].cellIndex,
                 fields = that.getVisibleFields(),
                 fields = that.getVisibleFields(),
                 field = fields[that.options.detailView && !that.options.cardView ? index - 1 : index],
                 field = fields[that.options.detailView && !that.options.cardView ? index - 1 : index],
-                column = that.columns[getFieldIndex(that.columns, field)],
+                column = that.columns[that.fieldsColumnsIndex[field]],
                 value = getItemField(item, field, that.options.escape);
                 value = getItemField(item, field, that.options.escape);
 
 
             if ($td.find('.detail-icon').length) {
             if ($td.find('.detail-icon').length) {
@@ -2326,7 +2315,7 @@
             visibleFields = [];
             visibleFields = [];
 
 
         $.each(this.header.fields, function (j, field) {
         $.each(this.header.fields, function (j, field) {
-            var column = that.columns[getFieldIndex(that.columns, field)];
+            var column = that.columns[that.fieldsColumnsIndex[field]];
 
 
             if (!column.visible) {
             if (!column.visible) {
                 return;
                 return;
@@ -2824,11 +2813,11 @@
     };
     };
 
 
     BootstrapTable.prototype.showColumn = function (field) {
     BootstrapTable.prototype.showColumn = function (field) {
-        this.toggleColumn(getFieldIndex(this.columns, field), true, true);
+        this.toggleColumn(this.fieldsColumnsIndex[field], true, true);
     };
     };
 
 
     BootstrapTable.prototype.hideColumn = function (field) {
     BootstrapTable.prototype.hideColumn = function (field) {
-        this.toggleColumn(getFieldIndex(this.columns, field), false, true);
+        this.toggleColumn(this.fieldsColumnsIndex[field], false, true);
     };
     };
 
 
     BootstrapTable.prototype.getHiddenColumns = function () {
     BootstrapTable.prototype.getHiddenColumns = function () {
@@ -3091,7 +3080,6 @@
     $.fn.bootstrapTable.methods = allowedMethods;
     $.fn.bootstrapTable.methods = allowedMethods;
     $.fn.bootstrapTable.utils = {
     $.fn.bootstrapTable.utils = {
         sprintf: sprintf,
         sprintf: sprintf,
-        getFieldIndex: getFieldIndex,
         compareObjects: compareObjects,
         compareObjects: compareObjects,
         calculateObjectValue: calculateObjectValue,
         calculateObjectValue: calculateObjectValue,
         getItemField: getItemField,
         getItemField: getItemField,

+ 1 - 1
src/extensions/accent-neutralise/bootstrap-table-accent-neutralise.js

@@ -149,7 +149,7 @@
                 for (var key in item) {
                 for (var key in item) {
                     key = $.isNumeric(key) ? parseInt(key, 10) : key;
                     key = $.isNumeric(key) ? parseInt(key, 10) : key;
                     var value = item[key],
                     var value = item[key],
-                        column = that.columns[$.fn.bootstrapTable.utils.getFieldIndex(that.columns, key)],
+                        column = that.columns[that.fieldsColumnsIndex[key]],
                         j = $.inArray(key, that.header.fields);
                         j = $.inArray(key, that.header.fields);
 
 
                     if (column && column.searchFormatter) {
                     if (column && column.searchFormatter) {

+ 2 - 2
src/extensions/filter-control/bootstrap-table-filter-control.js

@@ -199,7 +199,7 @@
             that.pageTo;
             that.pageTo;
 
 
         $.each(that.header.fields, function (j, field) {
         $.each(that.header.fields, function (j, field) {
-            var column = that.columns[$.fn.bootstrapTable.utils.getFieldIndex(that.columns, field)],
+            var column = that.columns[that.fieldsColumnsIndex[field]],
                 selectControl = $('.bootstrap-table-filter-control-' + escapeID(column.field));
                 selectControl = $('.bootstrap-table-filter-control-' + escapeID(column.field));
 
 
             if (isColumnSearchableViaSelect(column) && isFilterDataNotGiven(column) && hasSelectControlElement(selectControl)) {
             if (isColumnSearchableViaSelect(column) && isFilterDataNotGiven(column) && hasSelectControlElement(selectControl)) {
@@ -564,7 +564,7 @@
         //Check partial column filter
         //Check partial column filter
         this.data = fp ? $.grep(this.data, function (item, i) {
         this.data = fp ? $.grep(this.data, function (item, i) {
             for (var key in fp) {
             for (var key in fp) {
-                var thisColumn = that.columns[$.fn.bootstrapTable.utils.getFieldIndex(that.columns, key)];
+                var thisColumn = that.columns[that.fieldsColumnsIndex[key]];
                 var fval = fp[key].toLowerCase();
                 var fval = fp[key].toLowerCase();
                 var value = item[key];
                 var value = item[key];
 
 

+ 1 - 1
src/extensions/group-by/bootstrap-table-group-by.js

@@ -32,7 +32,7 @@
             if (!row.IsParent) {
             if (!row.IsParent) {
                 for (var prop in row) {
                 for (var prop in row) {
                     if (!isNaN(parseFloat(row[prop]))) {
                     if (!isNaN(parseFloat(row[prop]))) {
-                        if (that.columns[$.fn.bootstrapTable.utils.getFieldIndex(that.columns, prop)].groupBySumGroup) {
+                        if (that.columns[that.fieldsColumnsIndex[prop]].groupBySumGroup) {
                             if (sumRow[prop] === undefined) {
                             if (sumRow[prop] === undefined) {
                                 sumRow[prop] = 0;
                                 sumRow[prop] = 0;
                             }
                             }

+ 1 - 1
src/extensions/mobile/bootstrap-table-mobile.js

@@ -13,7 +13,7 @@
             $.each(that.columns, function (i, column) {
             $.each(that.columns, function (i, column) {
                 if (that.options.columnsHidden.indexOf(column.field) !== -1) {
                 if (that.options.columnsHidden.indexOf(column.field) !== -1) {
                     if (column.visible !== checked) {
                     if (column.visible !== checked) {
-                        that.toggleColumn($.fn.bootstrapTable.utils.getFieldIndex(that.columns, column.field), checked, true);
+                        that.toggleColumn(that.fieldsColumnsIndex[column.field], checked, true);
                     }
                     }
                 }
                 }
             });
             });

+ 1 - 1
src/extensions/multiple-search/bootstrap-table-multiple-search.js

@@ -35,7 +35,7 @@
                         for (var key in item) {
                         for (var key in item) {
                             key = $.isNumeric(key) ? parseInt(key, 10) : key;
                             key = $.isNumeric(key) ? parseInt(key, 10) : key;
                             var value = item[key],
                             var value = item[key],
-                                column = that.columns[$.fn.bootstrapTable.utils.getFieldIndex(that.columns, key)],
+                                column = that.columns[that.fieldsColumnsIndex[key]],
                                 j = $.inArray(key, that.header.fields);
                                 j = $.inArray(key, that.header.fields);
 
 
                             // Fix #142: search use formated data
                             // Fix #142: search use formated data

+ 1 - 1
src/extensions/reorder-columns/bootstrap-table-reorder-columns.js

@@ -142,7 +142,7 @@
                 }
                 }
 
 
                 for (var i = 0; i < ths.length; i++ ) {
                 for (var i = 0; i < ths.length; i++ ) {
-                    columnIndex = $.fn.bootstrapTable.utils.getFieldIndex(that.columns, ths[i]);
+                    columnIndex = that.fieldsColumnsIndex[ths[i]];
                     if (columnIndex !== -1) {
                     if (columnIndex !== -1) {
                         that.columns[columnIndex].fieldIndex = i;
                         that.columns[columnIndex].fieldIndex = i;
                         columns.push(that.columns[columnIndex]);
                         columns.push(that.columns[columnIndex]);

+ 1 - 1
src/extensions/select2-filter/bootstrap-table-select2-filter.js

@@ -224,7 +224,7 @@
     if (that.options.sidePagination === 'client') {
     if (that.options.sidePagination === 'client') {
       this.data = $.grep(this.data, function (row, idx) {
       this.data = $.grep(this.data, function (row, idx) {
         for (var field in filterValues) {
         for (var field in filterValues) {
-          var column = that.columns[$.fn.bootstrapTable.utils.getFieldIndex(that.columns, field)],
+          var column = that.columns[that.fieldsColumnsIndex[field]],
               filterValue = filterValues[field].toLowerCase(),
               filterValue = filterValues[field].toLowerCase(),
               rowValue = row[field];
               rowValue = row[field];