Как преобразовать JSON DateTime в удобочитаемую дату и время, используя Knockout и пользовательские привязки - PullRequest
3 голосов
/ 10 мая 2011

Я использую KnockoutJS с плагином сопоставления, и все работает хорошо, кроме поля DateTime, которое сериализуется в виде тиков, например: / Date (x) / где x = ticks.

Как быЯ: 1) Разобрать объект даты в удобочитаемую форму?2) Вернуть это из пользовательской привязки обратно в значение в модели?

Ответы [ 3 ]

14 голосов
/ 17 июня 2012

Вот пример пользовательской привязки в knockoutjs.Он использует moment.js для анализа даты

  ko.bindingHandlers.date = {
    update: function (element, valueAccessor) {
      var value = valueAccessor();
      var date = moment(value);
      $(element).text(date.format("L"));
    }
  };

. В вашем javascript вы можете использовать новое связывание, как и любое другое связывание нокаута.

  <td data-bind="date:Created" />
5 голосов
/ 10 мая 2011

Я ничего не знаю о KnockoutJS, так что, возможно, есть лучший способ сделать это, который уже встроен.Я также ничего не знаю о втором вопросе.Надеюсь, кто-то, кто на самом деле знает что-то об этом, может помочь вам.

Итак, с этим отказом от ответственности, вот как вы можете конвертировать его, используя "простой" JavaScript (вам может понадобиться включить json2.js Дугласа Крокфорда , если вы хотите поддерживать «старые» браузеры).JSON.parse принимает необязательный аргумент reviver, который может заменить каждое значение при его анализе.

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;
});
2 голосов
/ 19 февраля 2013

Вот пример, если у вас есть функции в вашей модели представления и привязка к входу:

ko.bindingHandlers.date = {
        update: function (element, valueAccessor) {
            var value = valueAccessor();
            var date = moment(value());
            var strDate = date.format('YYYY-MM-DD');
            $(element).val(strDate);
        }
    };

Ссылка на moment.js

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...