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

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

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

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

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

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


person Obiwan007    schedule 26.03.2012    source источник
comment
Здесь я обнаружил еще одну проблему с датами в формате JSON.net. Если я использую замененный модуль форматирования JSON.Net, дата будет хорошей и может быть легко преобразована в объекты даты JS. НО, если вы хотите отправить объект обратно на сервер - это не удастся. Почему-то кажется, что дериализация не работает, если форматер заменил форматировщик defaultjson...   -  person Obiwan007    schedule 27.03.2012


Ответы (1)


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

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

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

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

person Francesco Abbruzzese    schedule 27.03.2012
comment
Спасибо за ваш ответ. 1. проблема как-то легко разрешима - я просто использую JSON.Net lib для создания даты в формате ISO (не /Date*). Итак, новая дата (строка) работает отлично. 2. отправка обратно является проблемой, как вы указали. В настоящее время я понятия не имею, что клиент отправляет обратно на сервер. Я иногда проверяю это с помощью скрипача :) Я с нетерпением жду вашей библиотеки. На данный момент upshot/SPA на самом деле не вариант, так как пока слишком много проблем. Возможно, я попробую прямой подход в создании модели через модельщик нокаута. - person Obiwan007; 27.03.2012
comment
См. этот пост Скотта Хансельмана; hanselman.com/blog/. В конце поста он обещает, что в финальном релизе... они отправят JSON.net с WebApi... так что будет нормализация всех js и dll... которые будут работать вместе - person Francesco Abbruzzese; 28.03.2012
comment
моя библиотека была опубликована на cedeplex, см. здесь: mvccontrolstoolkit.codeplex.com По этой ссылке вы найдете указатели на примеры кода и руководства. Официальный документ будет обновлен в ближайшие дни - person Francesco Abbruzzese; 04.04.2012