2015-10-07 91 views
0

我正在使用Kendo UI Grid的Knockout.js集成(http://rniemeyer.github.io/knockout-kendo/web/Grid.html)。Knockout-Kendo.js網格日期格式化

在我的JSON中,我返回的日期顯示爲Oct 06 2015, 03:54 PM -04:00

我已經指定了列的類型和格式,格式爲:"{0:MM/dd/yyyy HH:mm tt}"但它似乎被完全忽略。

以下是kendogrid綁定定義:

<div data-bind="kendoGrid: { 
    data: projectSubmissions, 
    dataSource: { 
    schema: { 
     model: { 
     fields: { 
      SubmissionId: { type: 'number' } , 
      FormName: { type: 'string' } , 
      IdVersion: { type: 'string' }, 
      SubmittedDateFormatted: { type: 'string'}, 
      SubmittedDate: { type: 'date'}, 
     } 
     } 
    } 
    }, 
    groupable: false, 
    scrollable: false, 
    filterable: { 
    extra: false, 
    operators: { 
     string: { 
      startswith: 'Starts with', 
      eq: 'Is equal to', 
      neq: 'Is not equal to' 
     } 
    } 
    }, 
    sortable: true, 
    pageable: { pageSize: 10 }, 
    columns: [ 
    { 
     field: 'SubmissionId', 
     title: 'No.', 
     width: 70, 
    } 
    ,{ field: 'FormName', title: 'Form', width:120 } 
    ,{ field: 'IdVersion', title: 'Id/Version', width:100} 
    ,{ 
     field: 'SubmittedDate', 
     filterable: true, 
     title: 'Submitted Date', 
     format: '{0:MM/dd/yyyy HH:mm tt}', 
     width: 120 
    } 
    ,{ field: 'Inspector', title: 'Inspector', filterable: true, width:140 } 
    ,{ field: 'CellNo', title: 'Cell No.', width:100, filterable: false } 
    ] 
}"></div> 
+0

代碼中存在拼寫錯誤:'''{0:MM/dd/yyyy HH:mm tt}「,你在使用格式之前使用兩個引號。 – Buzinas

+0

謝謝 - 我修正了(這只是粘貼示例時的錯誤) – David

+0

你如何解析你的json? – Amit

回答

3

你的問題是不是與format setting。這控制瞭如何格式化顯示值。你的問題與價值本身有關。要使格式成功,該值必須是一個開頭的Date對象,並且就像現在一樣,它是一個字符串。

你可以使用一個映射對象(如所示here)在映射過程以創建Date對象:

var mapping = { 
    SubmittedDate: { 
    create: function(options) { 
       return new Date(options.data); 
    } 
}; 
ko.mapping.fromJS(data, mapping, this); 
+0

這解決了我的問題,謝謝您。我也有類似的問題,可篩選的UI:與knockout劍道網格datepicker以及http://stackoverflow.com/questions/32994344/knockout-kendo-js-grid-uidatepicker-filter – David

1

問題的根源在於,JSON規範定義沒有日期數據類型。由於沒有標準,所以使用各種字符串格式來表示JSON文檔中的日期。然而,Kendo網格期望Date對象,而不是字符串。

在你的情況下,它好像是服務器發送"Oct 06 2015, 03:54 PM -04:00",這實際上是Date.parse()會接受的格式之一。

JavaScript's JSON.parse() function通過接受reviver函數,可以根據您的規則轉換JSON中的任何特殊值,從而緩解標準中的這種遺漏。這通常用於「恢復」日期。

適應您輸入JSON:

function reviveDates(key, val) { 
    if (key === "SubmittedDate") { 
     return new Date(val); 
    } 
    return val; 
} 

JSON.parse(yourJSON, reviveDates); 

爲了使這個更方便,你可以真正融入到這一點jQuery的低級別的Ajax程序,因此你不必處理更高級別的日期轉換:

$.ajaxSetup({ 
    converters: { 
     'text json': function (data) { 
      try { 
       return JSON.parse(data, reviveDates); 
      } catch (ex) { 
       $.error("Invalid JSON: " + data); 
      } 
     } 
    } 
}); 
+0

這看起來也很有趣,以及我試圖添加但有些事情並不完全正確。在上面的示例中,什麼是reviveDates ...在那裏有些不正確? thx – David

+0

@David'reviveDates'是我在我的第一個代碼示例中定義的函數。 – Tomalak

+0

哦,我的壞..絕對..謝謝 – David