2014-03-24 52 views
0

我需要有關添加自定義屬性在slickgrid列對象提出了一些建議。以下是我將嘗試解釋的一些情況,以使我的問題陳述清晰。添加自定義參數列對象爲自定義格式slickgrid

我試圖寫一個簡寫並充分利用前4個字符原文的城市的名稱自定義格式(我已刪除的其他規則,使這個問題簡單的解釋)。因此,例如,夏洛特將在格式化程序中成爲CHAR。我想對不同的字符串列做類似的格式化,但我需要顯示和大寫5個字符。

這就是我試過的。

我寫了一個自定義的格式化程序,並在列對象中傳遞了自定義屬性'NumOfChar'。該屬性可以在格式化程序的ColumnDef對象中訪問。我很想知道這種方法是否正確並且可以接受,或者有更好的方法來實現這一點。

AbbreviationFormatter = function(row, cell, value, columnDef, dataContent) { 
    var output = ''; 

    if(! columnDef.NumOfChar) { 
     columnDef.NumOfChar = 4 // sets default 
    } 
    if(value) { 
     output = value.substring(0, columnDef.NumOfChar).toUpperCase(); 
    } 

    return output; 
} 

某處在列定義

var columns = [ { id: 'id_1', 
        field='city', 
        name='city', 
        formatter: AbbreviationFormatter, 
        NumOfChar: 4 }, 
       { id: 'id_2', 
        field='randomString', 
        name='randomString', 
        formatter: AbbreviationFormatter, 
        NumOfChar: 6 } , ... 
       ]; 

感謝。

回答

1

是的,它很容易做到,我做了並測試它,按預期工作。首先,我所做的自定義格式,請注意,我延長了SlickGrid格式化程序到一個單獨的文件,該文件是總是更好,所以這裏的自定義格式的代碼:

// Extend the Slick.Formatters Object 
(function ($) { 
    // register namespace 
    $.extend(true, window, { 
     "Slick": { 
      "Formatters": {     
       "CustomUpper": CustomUpperFormatter, 
       "TitleCase": TitleCaseFormatter 
      } 
     } 
    }); 

    // -- 
    // Capitalize number of chars defined by user 
    function CustomUpperFormatter(row, cell, value, columnDef, dataContext) { 
     //console.debug(columnDef.formatterOptions.NumOfChar); 
     var nbChar = columnDef.formatterOptions.NumOfChar; 
     var output = value.substring(0, nbChar).toUpperCase() + value.substring(nbChar); 

     return value ? output : ''; 
    } 

    // Capitalize first char of each word 
    function TitleCaseFormatter(row, cell, value, columnDef, dataContext) { 
     var output = value.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();}); 

     return value ? output : ''; 
    }  
})(jQuery); 

,然後你的新列的定義:

// your column definition 
var columns = [ { id: 'id_1', 
        field='city', 
        name='city', 
        formatter: Slick.Formatters.CustomUpper, 
        formatterOptions: { NumOfChar: 4 } }, 
       { id: 'id_2', 
        field='randomString', 
        name='randomString', 
        formatter: Slick.Formatters.CustomUpper, 
        formatterOptions: { NumOfChar: 4 } } , 
       { id: 'id_3', 
        field='randomString', 
        name='randomString', 
        formatter: Slick.Formatters.TitleCase }, ... 
       ]; 

所以基本上你可以添加任何你想要的屬性你想要的名字,你會簡單地把它與columnDef財產格式化裏面,所以如果你做一個console.debug(columnDef);自定義格式裏面,你會看到的所有屬性的行。這是它:)

注:
請注意,我創建的對象爲formatterOptions,但它實際上可能是直接在NumOfChar,如果你用這種方法去,因爲你實際上開始你的代碼,然後只需調用columnDef.NumOfChar。我喜歡使用對象的原因是我可以傳遞多個選項,例如具有最小和最大字符數量...

注#2
這給了我一個標題Case格式化程序(Title Case定義就是將每個單詞的首字母大寫),所以我更新了我的代碼以包含它,但是不需要任何選項。

+0

它實際上工作嗎? – ghiscoding