Сохранение изменений в БД, сделанных на веб-странице - PullRequest
0 голосов
/ 16 августа 2011

Я переписывал заголовок и контент 3 раза, прежде чем опубликовать его, я не нашел правильного способа спросить это: P

У меня есть страница, которая управляет списком заметок, у меня есть CRUD наэта страница, но элементы создаются и сохраняются в javascript (с использованием knockoutjs).

Я создаю новую заметку, добавляю ее в модель в javascript, и она отображается на странице.

Я сохраняю заметки в базе данных, когда добавляю их в модель и отправляю через Ajax (асинхронно) на сервер.Итак, моя заметка на экране и в базе данных действительно быстрая.

Я отправляю заметку без идентификатора на сервер, и EF позаботится об идентификаторе.

Пока все хорошо.

Представьте, что я добавляю заметку, но не обновляю веб-страницу, поэтому заметка находится в базе данных, тоже в модели javascript, но в модели у нее пока нет идентификатора.

Я делаю некоторые изменения в заметке, и да, я хочу обновить заметку в базе данных ... но ... как?

Я отправляю свою заметку на сервер с изменениями, но помните, чтоУ предмета по-прежнему нет идентификатора, поэтому я не могу сказать:

Эй, ЭФ, дай мне записку с идентификатором == xx, и мы собираемся обновить эту заметку.

Другие свойства могутизменить на веб-странице, чтобы у меня не было ничего, что идентифицировало бы примечание, кроме идентификатора, который здесь не работает.

Я пробовал это:

Отправьте новую заметку на сервер, вставьтеэто в базе данных, получить его снова (чтобы выбрать Id), отправить его обратно в JavaScript и обновить объектт с идентификатором.Поэтому, когда я редактирую, у меня есть идентификатор.Да, но «сохранить» вызов должен быть синхронизирован, и это разрушит опыт.

Есть идеи?

РЕДАКТИРОВАТЬ : Параметры синхронизации не так медленны вконец, но должен быть асинхронный способ, и что-то вроде «Вставить в базу данных», «Извлечь последний элемент, который я вставил» и «Вернуть клиенту», немного хакерски.

1 Ответ

1 голос
/ 16 августа 2011

Вы можете вернуть идентификатор новой записи в вашем асинхронном вызове. Если вы используете jQuery, вы можете подписаться на обратный вызов «success», и пока ваш контроллер возвращает JSON с идентификатором новой записи, вы можете обновить свою модель на стороне клиента.

Даже при таком подходе вам потребуется способ идентифицировать элемент, обновляемый на стороне клиента (что действительно является корнем вашего вопроса). Для этого вы, вероятно, можете сгенерировать случайный GUID на стороне клиента, отправив при сохранении его на сервер и при возврате идентификатора верните его в jQuery, чтобы вы могли определить правильный элемент для обновления на странице.

...