2017-09-07 8 views
0

私はJQgridをExcelのようなExcelのような機能を実装しました。ここでは、検索ツールバーのドロップダウンリストがあります。私は動的なドロップダウンリストを作成する際に使用した重複したコードを削除する助けが必要です。以下に示す コード:上記のコードでの言及としてjqueryを使ってジェネリックメソッドを作成する方法

// Start ---- Dropdown filter Implementation // 
    beforeProcessing: function (data) { 
     var sourceLocaleMap = {}, sourceLocaleValues = ":All", rows = data.rows, i, sourceLocale, sourceLocaleName; 
     for (i = 0; i < rows.length; i++) { 
      sourceLocale = rows[i].SourceLocaleId; 
      sourceLocaleName = rows[i].SourceLocaleName; 
      if (!sourceLocaleMap.hasOwnProperty(sourceLocale)) { 
       sourceLocaleMap[sourceLocale] = 1; 
       sourceLocaleValues += ";" + sourceLocale + ":" + sourceLocaleName; 
      } 
     } 
     $(this).jqGrid("setColProp", 'SourceLocaleId', { 
      stype: "select", 
      searchoptions: { 
       value: sourceLocaleValues.substring(5), 
       sopt: ["eq", "ne"], 
       clearSearch: false, 
       attr: { multiple: 'multiple', size: 29 }, 
       dataInit: dataInitMultiselect 
      } 
     }) 

     var CompanyMap = {}, CompanyValues = ":All", rows = data.rows, i, Company, CompanyName; 
     for (i = 0; i < rows.length; i++) { 
      Company = rows[i].CompanyId; 
      CompanyName = rows[i].CompanyName; 
      if (!CompanyMap.hasOwnProperty(Company)) { 
       CompanyMap[Company] = 1; 
       CompanyValues += ";" + Company + ":" + CompanyName; 
      } 
     } 
     $(this).jqGrid("setColProp", 'CompanyId', { 
      stype: "select", 
      searchoptions: { 
       value: CompanyValues.substring(5), 
       sopt: ["eq", "ne"], 
       clearSearch: false, 
       attr: { multiple: 'multiple', size: 2 }, 
       dataInit: dataInitMultiselect 
      } 
     }) 

     var CurrencyMap = {}, CurrencyValues = ":All", rows = data.rows, i, Currency, CurrencyName; 
     for (i = 0; i < rows.length; i++) { 
      Currency = rows[i].CurrencyId; 
      CurrencyName = rows[i].CurrencyName; 
      if (!CurrencyMap.hasOwnProperty(Currency)) { 
       CurrencyMap[Currency] = 1; 
       CurrencyValues += ";" + Currency + ":" + CurrencyName; 
      } 
     } 
     $(this).jqGrid("setColProp", 'CurrencyId', { 
      stype: "select", 
      searchoptions: { 
       value: CurrencyValues.substring(5), 
       sopt: ["eq", "ne"], 
       clearSearch: false, 
       attr: { multiple: 'multiple', size: 17 }, 
       dataInit: dataInitMultiselect 
      } 
     }) 

     var LocaleMap = {}, LocaleValues = ":All", rows = data.rows, i, Locale, LocaleName; 
     for (i = 0; i < rows.length; i++) { 
      Locale = rows[i].LocaleId; 
      LocaleName = rows[i].LocaleName; 
      if (!LocaleMap.hasOwnProperty(Locale)) { 
       LocaleMap[Locale] = 1; 
       LocaleValues += ";" + Locale + ":" + LocaleName; 
      } 
     } 
     $(this).jqGrid("setColProp", 'LocaleId', { 
      stype: "select", 
      searchoptions: { 
       value: LocaleValues.substring(5), 
       sopt: ["eq", "ne"], 
       clearSearch: false, 
       attr: { multiple: 'multiple', size: 2 }, 
       dataInit: dataInitMultiselect 
      } 
     }).jqGrid('destroyFilterToolbar') 
      .jqGrid('filterToolbar', { 
       stringResult: true, 
       searchOnEnter: false, 
       defaultSearch: "cn" 
      }); 
    }, 
    // End ---- Dropdown filter Implementation // 

、私は1つの関数の代わりに、重複したコードをしたいです。ここで私は異なるパラメータを持つ4種類のIDを持っています。私は1つの関数を私はパラメータを渡すことができます&は、このパラメータの値に依存する設定されます。どうすればこのコードを実装することができますか&コードから冗長なデータを減らしてください。前もって感謝します。

答えて

0

同じデータを繰り返す代わりに、以下の関数を作成しました&が私の問題を解決しました。誰にも役立つかもしれない。あなたの参照のためのコードを見つけてください。

getUniqueNames = function (columnName, data) { 
    var textsMap = {}, Values = ":All", rows = data.rows, i, textKey, textValue; 
    var columnValue = columnName.substring(0, columnName.length - 2) + 'Name'; 

    //Ascending order sorting 
    rows.sort(compare); 
    function compare(a, b) { 
     if (a[columnValue] < b[columnValue]) 
      return -1; 
     if (a[columnValue] > b[columnValue]) 
      return 1; 
     return 0; 
    } 

    for (i = 0; i < rows.length; i++) { 
     textKey = rows[i][columnName]; 
     textValue = rows[i][columnValue]; 
     if (!textsMap.hasOwnProperty(textKey)) { 
      textsMap[textKey] = 1; 
      Values += ";" + textKey + ":" + textValue; 
     } 
    } 
    return Values; 
}, 

setSearchSelect = function (columnName, data) { 
    $('#list2').jqGrid('setColProp', columnName, 
       { 
        stype: 'select', 
        searchoptions: { 
         value: (getUniqueNames(columnName, data)), 
         sopt: ["eq", "ne"], 
         clearSearch: false, 
         sortorder: 'asc', 
         attr: { multiple: 'multiple' }, 
         dataInit: dataInitMultiselect 
        } 
       }) 
     }); 
}; 
関連する問題