0

Kendo UI Grid ( http://rniemeyer.github.io/knockout-kendo/web/Grid.html ) との Knockout.js 統合を使用しています。

私の JSON では、次のように表示される日付を返していますOct 06 2015, 03:54 PM -04:00

列の種類と形式を format: として指定しました"{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>
4

2 に答える 2

3

あなたの問題はフォーマットの設定ではありません。これは、表示用に値をフォーマットする方法を制御します。あなたの問題は値自体にあります。フォーマットが成功するためには、値はDate最初からオブジェクトである必要があり、現在のように文字列です。

マッピング オブジェクト (ここに示すように) を使用してDate、マッピング プロセス中にオブジェクトを作成できます。

var mapping = {
  SubmittedDate: {
    create: function(options) {
              return new Date(options.data);
    }
};
ko.mapping.fromJS(data, mapping, this);
于 2015-10-07T12:48:58.750 に答える
1

根本的な問題は、JSON 仕様で Date データ型が定義されていないことです。標準がないため、JSON ドキュメントで日付を表すためにあらゆる種類の文字列形式が使用されています。ただし、Kendo Grid はDate文字列ではなくオブジェクトを想定しています。

あなたの場合、サーバーが送信するように見えますが"Oct 06 2015, 03:54 PM -04:00"、これは実際にDate.parse()は受け入れるフォーマットの1つです。

JavaScript のJSON.parse()関数は、ルールに従って 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);
            }
        }
    }
});
于 2015-10-07T13:28:24.773 に答える