Проблема в том, что вы создаете новый экземпляр RoomUsageList каждый раз, когда вызывается функция saveTap
.Это сбрасывает _roomList
в []
.
Если вы вызываете roomUsageList = new RoomUsageList()
вне функции, тогда установщик должен работать как положено и добавлять новые экземпляры RoomUsage
к частному атрибуту _roomList
.
РЕДАКТИРОВАТЬ: Typo EDIT2: Удалены дополнительные журналы консоли в фрагмент кода
class RoomUsage {
constructor () {
//
}
}
class RoomUsageList {
constructor () {
// private attributes
this._roomList = [];
}
set roomList(newIns) {
const roomList = [...this._roomList, newIns];
this._roomList = roomList
}
}
// Create global state
const roomUsageList = new RoomUsageList();
function onFormSubmit (event) {
event.preventDefault();
// create a new class instance when the SAVE button
// is pushed.
let newAddress = document.querySelector('.address').value;
let newRoomNo = document.querySelector('.roomNumber').value;
let newLightSwitch = document.querySelector('.lights').checked;
let newHeatCoolSwitch = document.querySelector('.heatingCooling').checked;
let newSeatsUsed = document.querySelector('.seatsUsed').value;
let newSeatsTotal = document.querySelector('.seatsTotal').value;
let roomUsageIns = new RoomUsage();
roomUsageIns.address = newAddress;
roomUsageIns.roomNumber = newRoomNo;
roomUsageIns.lightsOn = newLightSwitch;
roomUsageIns.heatingCoolingOn = newHeatCoolSwitch;
roomUsageIns.seatsTotal = newSeatsTotal;
roomUsageIns.seatsUsed = newSeatsUsed;
// add the above-created class instance into the RoomUsageList class
roomUsageList.roomList = roomUsageIns;
console.log(roomUsageList);
}
<form onsubmit="onFormSubmit(event)">
<div>
<label>Address</label>
<input type="text" class="address">
</div>
<div>
<label>Room Number</label>
<input type="text" class="roomNumber">
</div>
<div>
<label>Lights</label>
<input type="text" class="lights">
</div>
<div>
<label>
<input type="checkbox" class="heatingCooling">
Heating/Cooling
</label>
</div>
<div>
<label>Seats Used</label>
<input type="text" class="seatsUsed">
</div>
<div>
<label>Seats Total</label>
<input type="text" class="seatsTotal">
</div>
<button type="submit">Save</button>
</form>