Jqgrid поиск панели инструментов фильтра уникальных выпадающих списков с Json - PullRequest
1 голос
/ 25 октября 2011

Я создал панель инструментов фильтра на основе этого примера .У меня странная проблема;это работает только тогда, когда у меня установлены контрольные точки firebug, в противном случае раскрывающийся список отображает только «Все»Сетка устанавливается с типом данных: 'json', loadonce: true.Еще один момент;эта сетка также имеет вспомогательную сетку.Любая идея о том, как заставить это работать?

 grid = $("#dealsgrid"),
 getUniqueNames = function(columnName) {
       var texts = grid.jqGrid('getCol', columnName); 
       var uniqueTexts = [];
       var textsLength = grid.jqGrid('getGridParam','data');
       var text, textsMap = {}, i;
       for (i = 0; i < textsLength; i++) {
          text = texts[i];
          if (text !== undefined && textsMap[text] === undefined) {
            // to test whether the texts is unique we place it in the map.
            textsMap[text] = true;
            uniqueTexts.push(text);
          }
       }
       return uniqueTexts;
     }, 
 buildSearchSelect = function(uniqueNames) {
       var values = ":All";
       $.each(uniqueNames, function() {
          values += ";" + this + ":" + this;
       });
      return values;
   }, 
 setSearchSelect = function(columnName) {
      grid.jqGrid(
        'setColProp',
        columnName,
        {
            stype : 'select',
            searchoptions : {
                value : buildSearchSelect(getUniqueNames(columnName)),
                sopt : [ 'eq' ]
            }
        });
 };

После объявления сетки моя модель столбца выглядит следующим образом:

    colModel:[ 
               {name:'CM',index:'CM', width:50,editable:false},
               {name:'DealNo',index:'DealNo',width:75,editable:false,editoptions:{readonly:true, size:10},search:true, stype:'text', searchoptions: { sopt: ['eq']}},
               {name:'KeyDate',index:'KeyDate',width:100, search:false, align:"right",formatter:'date'},
               {name:'VendorNo',index:'VendorNo', width:75,search:true},
               {name:'VendorName',index:'VendorName', width:100,search:true},
               {name:'ItemQty',index:'ItemQty', width:75,search:false},{name:'StartDate',index:'StartDate',width:100,align:"right",formatter:'date',search:false},
               {name:'EndDate',index:'EndDate',width:100, align:"right",formatter:'date',search:false},
               {name:'ActiveStartDate',index:'ActiveStartDate',width:100, align:"right",formatter:'date',search:false, sorttype:"date", editable:true,editoptions:{size:10}},                   {name:'ActiveEndDate',index:'ActiveEndDate',width:100,align:"right",formatter:'date',search:false, sorttype:"date",editable:true,editoptions:{size:10}},             
               {name:'DealType',index:'DealType', width:75,search:false}

           ],

и, наконец, мой вызов для создания filterToolBar изаполните выпадающий список

        setSearchSelect('CM'); 
        grid.jqGrid('setColProp', 'Name', {
        searchoptions : {
            sopt : [ 'cn' ],
            dataInit : function(elem) {
               $(elem).autocomplete({
                  source : getUniqueNames('Name'),
                  delay : 0,
                  minLength : 0
               });
           }
        }

    });
    grid.jqGrid('filterToolbar', {
       stringResult : true,
       searchOnEnter : true,
       defaultSearch : "eq"
    });

Любые предложения будут с благодарностью.Спасибо

1 Ответ

1 голос
/ 01 ноября 2011

Удалил мой старый ответ, теперь мы знаем, что ваша функция что-то возвращает (если вы поставили на нее точку останова).Может ли быть так, что ваша сетка еще не загрузила данные до вызова getUniqueNames?Это объясняет, что если вы установите точку останова на нее, у нее будет больше времени для загрузки данных до вызова getUniqueNames.

Так что, если вы вызываете setSearchSelect в gridComplete или, возможно, даже loadComplete, все должно быть в порядке.Возможно, вам даже нужно установить для свойства async сетки значение false.Мне нужно проверить это с помощью моего собственного кода, чтобы я мог предоставить вам пример.Я сделаю это первым делом утром.В то же время вы можете попробовать сами, выполнив некоторые корректировки на основе информации выше.

   $('#yourgrid').jqGrid({
    ...,
    async: false,
    loadComplete/gridComplete: function() { setSearchSelect('CM'); }
   });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...