Upshot MVC 4 обработка даты, привязки нокаута

Как upshot.js обрабатывает объекты DateTime?

Как кажется, он просто создает "нормальные" строки и не создает реального объекта даты JS.

Все проблемы, связанные с форматированием дат JSON и MVC, обсуждаются здесь уже: Обработка дат с помощью Asp.Net MVC и KnockoutJS

Таким образом, даже после изменения форматирования JSON по умолчанию MVC для JSON.Net он все еще не выполняет автоматического преобразования на сегодняшний день. К сожалению, все привязки должны выполняться "за руку", чтобы создать объект Date внутри. С датой форматирования JSON.Net к новому методу Date (string), похоже, работает нормально, так как конструктор abel отлично обрабатывает формат datestring.

Существует ли "общая" lib для обработки всех разных типов значений в привязках для нокаута?

Ответ 1

Это старая история, из-за того, что json не имеет формата по умолчанию для дат. Более того, формат /Date (.....)/, притворяемый .Net(.Net не просто asp.net), нелегко обрабатывать также с настройкой json, разрешенной всеми современными браузерами:

  • Первая проблема заключается в том, что формат/Date(.....)/не понимается функцией разбора браузера json. Это легко решить, настроив Json-синтаксический анализ. В сети много исправлений.
  • У вас такая же проблема при отправке даты на сервер. Однако в этом случае очень сложно запланировать, потому что, хотя метод JSON.stringify принимает функцию для настройки сериализации json, если вы передаете функцию, которая преобразует каждую дату в строку "/Date(.....)/".... затем функцию string ADD furteh\и преобразуем ее в: "\/Date (.....) \/", то есть она ускользает от \ char.... но строка, преобразованная таким образом, не является понимаемый через dotnet. С другой стороны, если вы преобразуете даты в /Date (.....)/...no escape char добавляется так... также в этом случае вы получаете неправильную кодировку.
  • Также, если вы решите вышеуказанные проблемы... после того, как сервер/клиент/сервер с двусторонней поездкой изменил дату, изменилась. В частности, смещение временной шкалы вычитается из исходной даты... Это связано с различными способами .NET и браузеры обрабатывают временные рамки.
  • upshot просто вызывает функцию браузера JSON.stringify... поэтому он не оставляет вам места для настройки дат.

если вы используете клиентские блоки в проекте Mvc Controls Toolkit (я являюсь координатором), вы можете использовать "улучшенный" нокаут который автоматически обрабатывает проблемы 1 и 2. В следующем выпуске, который выйдет через несколько дней, я также добавлю автоматическую обработку проблемы 3. Однако... это НЕ РЕШЕТ проблему проблемы... поскольку я подключил функции сопоставления плагина отображения knokout, которые не используются при восстановлении данных на сервере... и после того, как вышли прямые вызовы JSON.stringify... кажется, нет никакого способа устранить проблему... кроме изменения результата обработки дескрипторов json при отправке данных.

В обновленном выпуске клиентских блоков я предоставил класс UpdateManager, который выполняет задание "похоже" на результат, который правильно обрабатывает даты... Однако это никогда не заменит результат, так как использует совершенно другую стратегию обновления... и это просто вариант БОЛЬШЕ не подставить. Поэтому я надеюсь, что в финальной версии решения будет возможность настроить json-форматирование данных.