2017-03-08 60 views
0

我正在做一個餐廳管理系統,在表格訂購部分,有一個帶有ID標籤的表格列表(例如T01,T02 ...),當我點擊桌子上的某個菜單時,會彈出一個菜單,菜單中可以點擊添加任何食物或減少它。MongoDB更新導致其他無法匹配的字段也被更新

問題

當我嘗試添加任何食物的量,同時訂貨許多表,其他表也了,我加入到當前的表數量。

如果Table1: {Fish : 3}, Table2: {Fish : 0},如果我添加魚數量1至表2,表1也可以由1

最終結果補充說:Table1: {Fish : 4}, Table2: {Fish : 1}

觸發

如果我訂購了表1,然後關閉模態並回到訂單部分訂購表2,表1將受到影響,如果我訂購N表,這將繼續,所有表格將受到影響

臨時解決方案

如果我訂購了表1,然後刷新瀏覽器,那麼爲了表2,然後,我命令並沒有得到上表影響由它

我使用流星1.4

代碼:

//Client 
'click .js-order' : (e) => { 
    var tableId = e.currentTarget.id; 

    var findTableOrder = Order.findOne({table_id: tableId}); 

    var orderList = {} 

    findTableOrder 
    ? console.log("Order exist") 
    : Order.insert({table_id: tableId, order: orderList}); 

    orderList = Order.findOne({table_id: tableId}).order 

    Session.set("quantityTrack", orderList); 
    $("#orderModal").modal("show"); 

    $(".modal-title").text("Order for table: " + Tables.findOne({_id: tableId}).table_id); 

    $(".js-add-quantity").click((e) => { // Adding Event 
    var foodObjKey = ItemMeta.findOne({UID: e.currentTarget.id}).foodId; 
    if (orderList[foodObjKey] == null) { 
     orderList[foodObjKey] = 0; 
    } 
    orderList[foodObjKey] = orderList[foodObjKey] + 1; 
    Meteor.call("updateOrder", tableId, orderList, (err) => { 
     err 
     ? console.log(err) 
     : console.log("Order Update Successful"); 
    }); 
    Session.set("quantityTrack", orderList); 
    }); // Adding event ends 
} 

//Server/methods 
updateOrder : (tableid, orderlist) => { 
    Order.update({ 
    table_id: tableid 
    }, { 
    $set: { 
     order: orderlist 
    } 
    }); 
}); 

如果我遺漏了任何東西,請告訴我,我會編輯帖子,並非常感謝。

+0

'console.log(e.currentTarget.id)'調試並確保'table_id'對於每個表都是唯一的 –

+0

@jonathan,是的,我已經在控制檯日誌中看到它,但是因爲我不想讓我的代碼在提問時顯得凌亂,所以我在這裏刪除它們。 table_id對於每個表都是唯一的,是的。 – ShadowLegend

回答

0

由於模板助手總是等待偵聽事件,所以如果事件觸發,它會添加,所以點擊一個表後,它會等待,然後點擊另一個表,觸發兩個表都被添加,所以該解決方案將添加事件與表的相同點擊事件分開。