Javascript 收集和汇总值(在多个IIFE中导航时遇到问题)

Javascript 收集和汇总值(在多个IIFE中导航时遇到问题),javascript,ecmascript-6,Javascript,Ecmascript 6,我正在做一个简单的预算应用程序项目作为第一个JS项目。我使用3个主要部分结构,其中1个预算控制器包含我的价值观和预算功能,1个UI控制器,以及一个处理IIFE之间信息交换的全局控制器。我正在努力从输入中获取信息,计算并存储值 如果下面的代码不够清晰,可以检查整个文件 确切的问题是,当我按下输入按钮时,我的最终储蓄值不会汇总,而是始终采用以前的输入值。我有这个函数,但我似乎无法正确计算它 ctrlAddPot = () => { let potInput = UICtrl.getPo

我正在做一个简单的预算应用程序项目作为第一个JS项目。我使用3个主要部分结构,其中1个预算控制器包含我的价值观和预算功能,1个UI控制器,以及一个处理IIFE之间信息交换的全局控制器。我正在努力从输入中获取信息,计算并存储值

如果下面的代码不够清晰,可以检查整个文件

确切的问题是,当我按下输入按钮时,我的最终储蓄值不会汇总,而是始终采用以前的输入值。我有这个函数,但我似乎无法正确计算它

   ctrlAddPot = () => {

let potInput = UICtrl.getPotInput();
if (potInput.value > 0) {
  let addPot = budgetCtrl.addInputPot(potInput.value);

  console.log(addPot);

  UICtrl.addPotItem(addPot);
  UICtrl.clearFields();
  //calculate the budget
  updateBudget();
  }
}

 getPotInput: () => {
  return {
    value: parseFloat(document.querySelector(DOMStrings.inputPot).value),
  };
},


 getBudget: () => {
  return {
    budget: data.budget,
    totalInc: data.totals.inc,
    totalExp: data.totals.exp,
    totalPot: data.pot,
    };
   },
 };

  calculateBudget: () => {
  
  calculateTotal('exp');
  calculateTotal('inc');
  calculatePotTotal();
 
  data.budget = data.totals.inc - data.totals.exp - data.totals.pot;
},

 //I Believe THE PROBLEM IS HERE, BUT THERE COULD BE SOMETHING 
// ELSE WRONG IN the function that later executes the addInputPot
addInputPot: (val) => {
  let returnAddPot = data.pot;
  data.pot = val;
  return returnAddPot;
},

let data = {
allItems: {
  exp: [],
  inc: [],
},
totals: {
  exp: 0,
  inc: 0,
  pot: 0,
},
budget: 0,
pot: 0,
};

calculatePotTotal = (value) => {

let sumPot = 0;
data.pot[value]((cur) => {
  sumPot += cur.value;
});
data.totals = sumPot;
};

看起来bug是在生成的唯一ID中生成的。您有以下代码:

if (data.allItems[type].length > 0) {
    ID = data.allItems[type][data.allItems[type].length - 1].id = 1;
} else {
    ID = 0;
}
我已将其替换为:

ID = Date.now();
const预算控制器=(()=>{
成本费用=功能(id、说明、值){
this.id=id;
this.description=描述;
这个值=值;
};
常量收入=函数(id、说明、值){
this.id=id;
this.description=描述;
这个值=值;
};
calculateTotal=(类型)=>{
设和=0;
data.allItems[type].forEach((cur)=>{
总和+=当前值;
});
数据.总计[类型]=总和;
};
让数据={
allItems:{
exp:[],
股份有限公司:[],
},
总数:{
实验:0,
inc:0,
},
预算:0,
};
返回{
附加项:(类型、des、val)=>{
让newItem,ID;
//创建新ID
ID=Date.now();
//基于类型创建新项目
如果(类型==“exp”){
新项目=新费用(ID、des、val);
}else if(类型==“inc”){
新项目=新收入(ID、des、val);
}
//将其推入数据结构
data.allItems[type].push(newItem);
//返回新元素
返回新项目;
},
deleteItem:(类型,id)=>{
设id,索引;
ids=data.allItems[type].map((当前)=>{
返回当前的.id;
});
索引=id.indexOf(id);
如果(索引!=-1){
data.allItems[type].splice(索引,1);
}
},
calculateBudget:()=>{
//计算总收入和费用
计算总计(“exp”);
calculateTotal(“公司”);
//计算预算:收入-支出
data.budget=data.totals.inc-data.totals.exp;
},
getBudget:()=>{
返回{
预算:data.budget,
totalInc:data.totals.inc,
totalExp:data.totals.exp,
};
},
};
})();
//用户界面控制器
常量UIController=(函数(){
常量DOMStrings={
输入类型:“.添加类型”,
inputDescription:“.添加说明”,
输入值:“.添加值”,
输入btn:“.add btn”,
incomeContainer:“.收入清单”,
费用容器:“.费用清单”,
budgetLabel:“.budget value”,
收入标签:“.预算收入价值”,
费用标签:“.预算费用值”,
容器:“.container main”,
日期标签:“.budget title月”,
};
返回{
getInput:()=>{
返回{
类型:document.querySelector(DOMStrings.inputType).value,//将是inc或exp
说明:document.querySelector(DOMStrings.inputDescription).value,
值:parseFloat(document.querySelector(DOMStrings.inputValue).value),
};
},
addListItem:(对象,类型)=>{
让html,newHtml,元素;
//创建HMTL字符串
如果(类型==“inc”){
element=domastrings.incomeContainer;
html=
`${obj.description}${obj.value}`;
}else if(类型==“exp”){
元素=DOMStrings.expensesContainer;
html=
`${obj.description}${obj.value}`;
}
document.querySelector(element.insertAdjacentHTML(“beforeend”,html);
},
deleteListItem:(selectorID)=>{
设el=document.getElementById(selectorID);
el.parentNode.removeChild(el);
},
clearFields:()=>{
让字段=document.queryselectoral(
DOMStrings.inputDescription+“,”+DOMStrings.inputValue
);
让fieldsArr=Array.prototype.slice.call(字段);
fieldsArr.forEach((当前、索引、数组)=>{
current.value=“”;
});
fieldsArr[0]。焦点();
},
显示预算:(obj)=>{
document.querySelector(DOMStrings.budgetLabel).textContent=obj.budget;
document.querySelector(DOMStrings.incomeLabel).textContent=obj.totalInc;
document.querySelector(DOMStrings.expensesLabel).textContent=obj.totalExp;
},
显示月份:()=>{
让现在,年,月,月;
现在=新日期();
月份=[
“一月”,
“二月”,
“三月”,
“四月”,
“五月”,
“六月”,
“七月”,
“八月”,
“9月”,
“十月”,
“11月”,
“12月”,
];
month=now.getMonth();
year=now.getFullYear();
document.querySelector(DOMStrings.dateLabel).textContent=months[月]+,“+年;
},
getDOMStrings:()=>{
返回字符串;
},
};
})();
//全球应用程序控制器
常量控制器=(函数(budgetCtrl、UICtrl){
setupEventListeners=()=>{
让DOM=UICtrl.getDOMStrings();
document.querySelector(DOM.inputBtn).addEventListener(“单击”,ctrlAddItem);
document.addEventListener(“按键”,事件)=>{
if(event.keycode==13 | | event.which==13){
ctrlAddItem();
}
});
document.querySelector(DOM.container).addEventListener(“单击”,ctrlDeleteItem);
};
updateBudget=()=>{
//计算预算
budgetCtrl.calculateBudget();
//归还预算
让budget=budgetCtrl.getBudget();
//显示在UI预算中
UICtrl.displayBudget(预算);
};
ctrlAddItem=()=>{
//获取字段输入数据
让输入=UICtrl.getInput();
如果(input.description!==“”&&&!isNaN(i