Недавно я начал работать с KnockoutJs и быстро понял, используя значение по умолчанию Json(myModelWithADate)
, в результате получилось стандартное json-кодирование \/Date(-62135578800000)\/
. С небольшим количеством исследований я нашел четыре возможных способа обработки отображения моих дат в элементах dom.
1) Создайте привязку, которая обрабатывает преобразование с даты Json в желаемый формат
ko.bindingHandlers.date = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
var jsonDate = valueAccessor();
var value = new Date(parseInt(jsonDate.substr(6)));
var ret = value.getMonth() + 1 + "/" + value.getDate() + "/" + value.getFullYear();
element.innerHTML = ret;
},
update: function(element, valueAccessor, allBindingsAccessor, viewModel) {
}
};
Использование
<td data-bind="date: DueDate">
</td>
2) Верните "строки" из вашего контроллера
return Json(new {MyDate = DateTime.Now.ToShortDateString()});
3) Используйте JSON.NET, чтобы указать формат даты в формате james.newtonking.com
Пример
string isoJson = JsonConvert.SerializeObject(entry, new IsoDateTimeConverter());
// {"Details":"Application started.","LogDate":"2009-02-15T00:00:00Z"}
4) используйте JSON.parse для обработки ваших дат, как показано в этом qaru.site/info/36206/....
JSON.parse(jsonText, function(key, value) {
// Check for the /Date(x)/ pattern
var match = /\/Date\((\d+)\)\//.exec(value);
if (match) {
var date = new Date(+match[1]); // Convert the ticks to a Date object
return humanReadable(date); // Format the date how you want it
}
// Not a date, so return the original value
return value;
});
Они все работают, но я все еще борюсь, с которыми человек чувствует себя "правильно". Прямо сейчас моя кишка идет со смесью с привязкой и возвращающими строками. Поскольку я мог видеть, как я расширяю привязку для ввода ввода с помощью элементов управления дампинг jQuery UI.
Есть ли принятая практика при обработке отображения дат или других типов, таких как валюта? Есть ли другой вариант, который мне не хватает, который решает эту проблему?