Upshot MVC 4, обработка даты, нокаут-привязки - PullRequest
2 голосов
/ 26 марта 2012

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

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

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

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

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

1 Ответ

3 голосов
/ 27 марта 2012

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

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

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

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

...