Я столкнулся с некоторыми проблемами с некоторой корзиной покупок в javascript/json и ASP MVC
Сценарий: основная функция заключается в том, чтобы заказывать продукты, но не является обычной корзиной покупок для 1 пользователя, она может быть для 2 пользователей, 3 пользователей, 1 пользователя и т.д., Но ТОЛЬКО 1 корзина для покупок (объект javascript). Это то, что зависит от конкретного покупателя. Таким образом, основная проблема заключается в том, что если Покупатель покупает "торт" для пользователя1, а затем хочет купить что-то для пользователя2 с другой датой и тем же "торт", продукт будет "2 торты", но для второго пользователя, а первый пользователь потерял "торт".
Мне нужно сделать конкретным пользователем торт и конкретную дату. Поэтому, если Покупатель купит торт для пользователя1 за 2014/05/01 (например, с помощью datepicker), а затем купите торт для пользователя2 за 2014/05/02 (например, с помощью дампикера), количество продукта будет 1 для каждого пользователя, а не 2 торты с количеством в массиве.
Фактически я использую объект javascript для корзины покупок, как это
var ShoppingCart = {
BuyerID: 1, //I will handle this later
StoreID: 1,
Total: 0,
ShoppingCartItems: [] //array with json objects
};
Затем я использую функцию для нажатия на массив элементов, которые мне нужны на кнопке
function AddItem (ProductID,ProductName, Description, Price, Quantity, StoreID){
var UserID = $("#hiddenUserID").val(); //e.g. = 1
var ProductDate = $("#hiddenDateField").val(); //e.g. = 2014/05/01
ShoppingCartItems.push({
"ProductID": ProductoID,
"ProductName": ProductName,
"Description": Description,
"Price": Price,
"Quantity": Quantity,
"StoreID": StoreID,
"UserID": UserID, //this will change later
"ProductDate": ProductDate //this will change if the buyer choose another day
})
}
Эта функция работает каждый раз, когда покупатель нажимает кнопку. Продукты загружаются с помощью ajax, что не проблема. После выбора пользователем продукта будет создан новый массив с выбранным продуктом и всеми спецификациями, которые я использую. Итак, у меня есть 2 проблемы
Если Покупатель выбирает, например, 1 пирог, но он забыл, что ему нужно 2 пирога, если он снова щелкнет 2-м пирогом, массив подтолкнет новый элемент или другой продукт с количеством 1
Я хочу, чтобы продукт с тем же ProductID, идентификатором пользователя и датой обновил количество до 2 тортов, потому что из-за второй проблемы возникает первая проблема, мне нужно обновить количество с помощью ProductID, идентификатора пользователя и даты, потому что, если Покупатель планирует купить торт для каждого пользователя, продукт нужно разделить, например, таким образом это неправильно:
Продукты для userID = 1
Продукты для userID = 2
Я хочу, чтобы массив имел количество, разделенное для productID, userID и date, поэтому каждый продукт должен иметь "ссылку" между идентификатором пользователя и датой, чтобы иметь что-то вроде этого:
Продукты для userID = 1
Продукты для userID = 2
Таким образом, если пользователь1 и пользователь 2 имеют один и тот же продукт за ту же дату, мне нужна проверка, чтобы отделить количество для каждого продукта по идентификатору пользователя и DATE, что является большой проблемой.
Фактически Im, использующий MVC, таким образом, это лучший способ отправить с json и ajax в определенную модель (для modelstate.isvalid). Таким образом, этот код "проверен" с теми вещами, которые мне нужны для правильных данных в базе данных. Надеюсь, кто-то может мне помочь.
заранее спасибо
Когда вы вставляете новый товар в корзину, вам нужно сравнить его свойства с объектами в корзине, и если идентификатор продукта, идентификатор пользователя и дата совпадают, то вы хотите добавить новое количество в старое количество старого объекта в массиве вместо того, чтобы нажимать новый. В качестве альтернативы вы можете отправить процесс массива корзины после добавления элемента и слияния дубликатов при добавлении их количества. Я не уверен, какой метод лучше.
function AddItem (ProductID,ProductName, Description, Price, Quantity, StoreID) {
var merged = false;
var UserID = $("#hiddenUserID").val(); //e.g. = 1
var ProductDate = $("#hiddenDateField").val(); //e.g. = 2014/05/01
var newItemObj = {
"ProductID": ProductID,
"ProductName": ProductName,
"Description": Description,
"Price": Price,
"Quantity": Quantity,
"StoreID": StoreID,
"UserID": UserID,
"ProductDate": ProductDate
};
// loop through items in cart
for ( var i = 0; i < ShoppingCartItems.length; i++ ) {
// if product ID, user ID, and date are the same
if ( ShoppingCartItems[i].ProductID == newItemObj.ProductID &&
ShoppingCartItems[i].UserID == newItemObj.UserID &&
ShoppingCartItems[i].ProductDate == newItemObj.ProductDate ) {
// add the quantity of the new obj to the old one
ShoppingCartItems[i].Quantity += newItemObj.Quantity;
// if two items are merged, set a flag
merged = true;
}
};
// if no merge happened, just add the item normally
if ( !merged ) {
ShoppingCartItems.push( newItemObj );
}
}