Browse Source

Merge pull request #922 from raku/patch-1

Fix #798 rebase of pull request #804
文翼 10 years ago
parent
commit
90552eb0f2
1 changed files with 68 additions and 25 deletions
  1. 68 25
      src/extensions/filter-control/bootstrap-table-filter-control.js

+ 68 - 25
src/extensions/filter-control/bootstrap-table-filter-control.js

@@ -69,7 +69,8 @@
     });
 
     $.extend($.fn.bootstrapTable.COLUMN_DEFAULTS, {
-        filterControl: undefined
+        filterControl: undefined,
+        filterData: undefined
     });
 
     $.extend($.fn.bootstrapTable.Constructor.EVENTS, {
@@ -119,6 +120,37 @@
             }
 
             that.$header.find(sprintf('.th-inner:contains("%s")', column.title)).next().append(html.join(''));
+            if (column.filterData !== undefined && column.filterData.toLowerCase() !== 'column') {
+                var filterDataType = column.filterData.substring(0, 3);
+                var filterDataSource = column.filterData.substring(4, column.filterData.length);
+                var selectControl = $('.' + column.field);
+                selectControl.append($("<option></option>")
+                    .attr("value", '')
+                    .text(''));
+                switch (filterDataType) {
+                    case 'url':
+                        $.ajax({
+                            url: filterDataSource,
+                            dataType: 'json',
+                            success: function (data) {
+                                $.each(data, function (key, value) {
+                                    selectControl.append($("<option></option>")
+                                        .attr("value", key)
+                                        .text(value));
+                                });
+                            }
+                        });
+                        break;
+                    case 'var':
+                        var variableValues = window[filterDataSource];
+                        for (var key in variableValues) {
+                            selectControl.append($("<option></option>")
+                                .attr("value", key)
+                                .text(variableValues[key]));
+                        };
+                        break;
+                }
+            }
         });
 
         if (addedFilterControl) {
@@ -158,31 +190,42 @@
                     that.header.formatters[j], [value, item, i], value);
 
                 if ((!column.checkbox) || (!column.radio)) {
-                    if (column.filterControl !== undefined && column.filterControl.toLowerCase() === 'select' && column.searchable) {
-                        var selectControl = $('.' + column.field),
-                            iOpt = 0,
-                            existsOpt = false,
-                            options;
-                        if (selectControl !== undefined) {
-                            options = selectControl.get(0).options;
-
-                            if (options.length === 0) {
-                                //Added the default option
-                                selectControl.append($("<option></option>").attr("value", '').text(''));
-                            }
-
-                            for (; iOpt < options.length; iOpt++) {
-                                if (options[iOpt].value === value) {
-                                    existsOpt = true;
-                                    break;
+                    if (column.filterControl !== undefined && column.filterControl.toLowerCase() === 'select'
+                            && column.searchable) {
+
+                        if (column.filterData === undefined || column.filterData.toLowerCase() === 'column') {
+                            var selectControl = $('.' + column.field),
+                                    iOpt = 0,
+                                    exitsOpt = false,
+                                    options;
+                            if (selectControl !== undefined) {
+                                options = selectControl.get(0).options;
+
+                                if (options.length === 0) {
+
+                                    //Added the default option
+                                    selectControl.append($("<option></option>")
+                                        .attr("value", '')
+                                        .text(''));
+
+                                    selectControl.append($("<option></option>")
+                                        .attr("value", value)
+                                        .text(value));
+                                } else {
+                                    for (; iOpt < options.length; iOpt++) {
+                                        if (options[iOpt].value === value) {
+                                            exitsOpt = true;
+                                            break;
+                                        }
+                                    }
+
+                                    if (!exitsOpt) {
+                                        selectControl.append($("<option></option>")
+                                            .attr("value", value)
+                                            .text(value));
+                                    }
                                 }
                             }
-
-                            if (!existsOpt) {
-                                selectControl.append($("<option></option>")
-                                    .attr("value", value)
-                                    .text(value));
-                            }
                         }
                     }
                 }
@@ -233,4 +276,4 @@
         this.updatePagination();
         this.trigger('column-search', $field, text);
     };
-}(jQuery);
+}(jQuery);