2011-10-24 84 views
1

我已經創建了一個基於此 example的過濾器工具欄。我有一個奇怪的問題;這僅適用於設置了螢火蟲斷點時,否則,下拉菜單僅顯示「全部」。網格設置爲數據類型:'json',loadonce:true。還有一點;這個網格也有一個子網格。任何想法如何讓這個工作?我宣佈了網後Jqgrid搜索工具欄過濾器與Json的唯一下拉列表

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" 
    }); 

任何建議,不勝感激。 謝謝

+0

請問您可以用jsfiddle重現您的問題,以便我們可以看一看。我已經創建了一個適合您的資源(css和js) - http://jsfiddle.net/yTX3P/1/不要忘記保存它。 –

+0

@Martijn B我的代碼可在[鏈接](http://jsfiddle.net/yTX3P/4/embedded/result/) – Heather

+0

您的示例不會重現該問題。沒有可用的數據。我無法以這種方式幫助你。你可以嘗試的是從getUniqueNames方法返回uniqueTexts的斷點,並檢查哪些值被返回。如果這是空的,你必須關注getUniqueNames方法。 –

回答

1

現在我們知道你的函數正在返回一些東西(如果你在其上放置了一個斷點),現在刪除了我的舊回答。難道你的網格在getUniqueNames被調用之前還沒有加載數據?這解釋瞭如果你在它上面放置一個斷點,它有更多的時間在調用getUniqueNames之前加載數據。

所以,如果你在gridComplete中調用setSearchSelect,或者甚至可能loadComplete它應該沒問題。也許你甚至必須將網格的異步屬性設置爲false。我需要用我自己的代碼來檢查一下,所以我可以爲你提供一個例子。我會在早上做第一件事。同時你可以根據上面的信息做一些調整。

$('#yourgrid').jqGrid({ 
    ..., 
    async: false, 
    loadComplete/gridComplete: function() { setSearchSelect('CM'); } 
    }); 
+0

是的,我注意到在我舉的例子中,編輯它以便 var textsLength = texts.length 如果沒有中斷,var結果返回[],否則返回 \t [ 「MR」,「CW」,「TB」] – Heather

+0

查看我的更新回答 –

+0

感謝您的幫助 - 我終於搞定了!事實證明,我只好把一切都在loadComplete功能 異步:假, \t \t loadComplete:函數(){ \t \t \t setSearchSelect( 'CM'); (「#name:'searchoptions:{sopt:['cn'],dataInit:function(elem){$(elem).autocomplete({source:getUniqueNames('名稱'),延遲:0,minLength:0});}}}); \t \t \t $(「#dealsgrid」)。jqGrid('filterToolbar',{stringResult:true,searchOnEnter:true,defaultSearch:「cn」}); \t \t}, – Heather

相關問題