Add knockout (duh)
[setup]
[notes]
2.1 - Add ko.applyBindings() to budget.ejs
2.2 - Add self.itemAmount = ko.observable() to budget.js
2.3 - Add view data-bind for itemAmount on input and total column
2.4 - Add view input data-bind valueUpdate: 'afterkeydown'
3.1 - Add view-model itemFrequency = ko.observable() and itemMonthlyAmount = ko.computed()
3.2 - Add view select data-bind itemFrequency; change view total column data-bind to itemMonthlyAmount
3.3 - Add view data-bind total column expression .toFixed(2)
3.4 - Add view-model itemAmount default value of 0
4.1 - Jump: add view-model incomeItems field; put view HTML in container
4.2 - Add view data-bind line-item container foreach: incomeItems
4.3 - Add view-model computed incomeMonthlyTotal; add view data-bind table total incomeMonthlyTotal
5.1 - Add view-model function to add item; make view-model incomeItems observableArray; add view 'Add item' data-bind click: addItem
6.1 - Remove view-model incomeItems init; add view-model loadData and applyData functions
6.2 - Change view-model addItem function to AJAX
6.3 - Add id to LineItem; add view-model function deleteItem; add view remove data-bind click: parent.deleteItem
6.4 - Add view-model saveItem function; subscribe to itemMonthlyAmount changes to update