2010-02-06 3 views
2

Это вопрос, который я долго размышлял, но не хотел спрашивать, потому что я не был уверен, как это описать. m все еще не уверен, могу ли я описать это хорошо, но здесь он идет.Сопоставление объектов javascript с их идентификаторами в базе данных MySQL

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

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

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

Спасибо, Matt Mueller

+0

Какие значения идентификаторов имеют ваши элементы? Должен ли пользователь явно указывать странице, что требуется новый объект, или есть какой-то атрибут объектов, которые служат ключом? (Например, если пользователь вводит имена любимых городов для отдыха, название города может быть «естественным» ключом, поэтому не обязательно должен быть явный ключ, созданный с помощью базы данных.) – Pointy

+0

Также: имейте в виду, что когда что-то получается Вернемся к серверному приложению, все будет на карте, основанной на именах полей.Одна из общих вещей - сделать, чтобы имена полей включали некоторое значение индекса (например, «name_23» или «name [23]», в зависимости от вашей серверной среды). – Pointy

+0

Хороший вопрос. Чтобы попытаться сохранить это просто, я не объяснил всю историю. Идентификаторы - это номера, связывающие первичный ключ в базе данных. Идентификаторы хранятся в javascript, который сопоставляется с элементами html. Если вы знакомы с jQuery, это как $ ('# htmlelement'). Data ('ID', 3); – Matt

ответ

2

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

+0

Это гениально! Итак, для элементов, которые вам просто нужно обновить, вернешь ли с сервера что-то вроде «{40:40}»? – Matt

+1

Да. Я имею в виду, он может просто предположить, что элементы, не находящиеся на карте, сохраняют одинаковые идентификаторы, но это, безусловно, работает в любом случае. Я рада что тебе нравится. :) – 2010-02-07 03:26:06

+1

Yah хороший звонок. Вот как я его реализовал. Я никогда не думаю об использовании отрицательных чисел в качестве альтернативного состояния! Так элегантно .. – Matt

1

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

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

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

+0

Ну, что произойдет, если два человека используют страницу? Вы не можете предположить, что новыми значениями будут те, чьи ключи находятся за пределами того, что раньше было. – Pointy

+0

- сохранение идет каждый раз в ОДНОМ момент ... поэтому, когда вы собираетесь сохранять и знать все, что находится за пределами 15, это новое - вы просто извлекаете из нового файла newDID (скажем, 20), редактируете новые идентификаторы и сохраняете его в БД - нет вреда сделанный. –

+0

Это будет работать при нормальных обстоятельствах! Я недостаточно объяснил свое приложение, чтобы вы знали лучше, но в основном все «создано» при загрузке страницы. Это приложение ajax, поэтому в течение жизни взаимодействия вещи могут обновляться и создаваться, но в начале все начинается с создания. Когда я добавляю функциональность «edit», это будет работать отлично. Благодаря! – Matt

1

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

Ваш клиент может также пожелать отметить элементы для удаления. В этом случае уже существующие объекты будут иметь свой идентификатор, отправленный обратно с некоторым параметром флага, указывающим «DELETE ME». Объекты, созданные и удаленные до «отправки», не нуждаются в обработке сервера.

+0

Yah, точно. это то, чем я занимаюсь. По-прежнему не проходит мимо того факта, что внутри этой группы создания мне нужно знать, как они были собраны (в каком порядке были созданы созданные). Проверьте ответ @ bluej100. Я думаю, что это эффективный способ решить эту проблему. Спасибо за вашу помощь! – Matt

Смежные вопросы