Сопоставление объектов JavaScript с их идентификаторами в базе данных MySQL - PullRequest
2 голосов
/ 07 февраля 2010

Это вопрос, над которым я долго размышлял , но не хотел спрашивать, потому что не знал, как его описать. Я все еще не уверен, могу описать это хорошо, но здесь это идет ..

У меня есть веб-приложение, которое позволяет вам манипулировать кучей элементов на странице, но имеет одну кнопку сохранения. Когда я нажимаю «Сохранить», я хотел бы создать / обновить все эти изменения в одном POST (не постепенно). Если эти HTML-элементы были созданы впервые на странице, я хотел бы вставить их как новые записи в базу данных. Когда эти изменения сохраняются в базе данных впервые (создаются), я возвращаю идентификатор индекса, поэтому, если я внесу изменения снова, они будут обновлены в базе данных, а не созданы снова.

Что мешает, так это пакетное сохранение, которое не занимает всю эту полосу пропускания. Я хочу иметь возможность смешивать и сопоставлять создания и обновления, но отправка обратно идентификаторов из созданных элементов и сопоставление их с правильными HTML-элементами (чтобы они были обновлены в следующий раз) требует от меня кое-чего знать о порядке каждого пакетного элемента что приводит к некоторым проблемам. Мне было интересно, есть ли умный способ создавать или обновлять и правильно сопоставлять идентификаторы с различными элементами в рамках одного запроса ajax.

Надеюсь, это было понятно, дайте мне знать, если вам нужны разъяснения

Спасибо, Мэтт Мюллер

Ответы [ 3 ]

2 голосов
/ 07 февраля 2010

Вы можете просто использовать отрицательные идентификаторы с автоматическим уменьшением для вновь создаваемых элементов и вернуть карту с отрицательных идентификаторов на положительные. Например, отправьте [{id: 507, name: "foo"}, {id: -1, name: "bar"}, {id: -2, name: "baz"}], верните {-1: 510, -2: 511}, и ваш javascript обновит свои идентификаторы на основе карты.

1 голос
/ 07 февраля 2010

Если ваша страница знает, когда создается новый элемент, то она должна обеспечить, чтобы параметр "id" для этой группы параметров (т. Е. Атрибуты сущности, которая будет добавлена) был либо нулевым (не указан), либо некоторое значение маркера. Уже существующие сущности имеют значение идентификатора, которое не может быть изменено клиентом. Сервер просто должен отделить группы параметров с пустыми значениями идентификаторов от тех, у которых непустые значения.

Ваш клиент может также захотеть пометить элементы для удаления. В этом случае уже существующим объектам будет возвращен их идентификатор с некоторым параметром флага, указывающим «УДАЛИТЬ МЕНЯ». Сущности, которые создаются и затем удаляются перед отправкой, не требуют обработки сервером.

1 голос
/ 07 февраля 2010

хорошо, после загрузки, извлеките next ID из базы данных, чтобы вы знали, какой идентификатор будет иметь следующую часть страницы в базе данных. затем, при создании, в javascript вы можете работать с этим - т.е.:

Следующим идентификатором является 15, поэтому, когда вы добавляете следующее поле, его идентификатором является 16, а в стеке находится идентификатор 17 ... и когда вы удаляете одно только что созданное поле, нет проблем сместить каждый более высокий идентификатор на одно.

Затем в своем сценарии сохранения вы знаете, что каждый идентификатор, больший, чем тот, который вы выбрали ранее, «должен быть сохранен», а каждый меньший - обновлен.

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