JSFiddle - React, Tailwind, and code Playground
by bookamp
HTML
<script src="http://cloud.github.com/downloads/SteveSanderson/knockout/knockout-2.1.0.debug.js"></script>
<script src="https://raw.github.com/SteveSanderson/knockout.mapping/master/build/output/knockout.mapping-latest.debug.js"></script>
<button data-bind='click: addAddress'>Add Address</button>
<div data-bind="foreach: address">
<table class="AddressBlock">
<tbody >
<tr>
<td>
</td>
<td>
<input class="sDatePicker" data-bind="value: SMMDD" />
</td>
<td>
<input class="sDatePicker" data-bind="value: EMMDD" />
</td>
</tr>
<tr>
<td>Street 1</td>
<td colspan="2">
<input data-bind="value: ADDR_L1" />
</td>
</tr>
<tr>
<td>Street 2</td>
<td colspan="2">
<input data-bind="value: ADDR_L2" />
</td>
</tr>
<tr>
<td>Street 3</td>
<td colspan="2">
<input data-bind="value: ADDR_L3" />
</td>
</tr>
</tbody>
</table>
</div>
JavaScript
var model = {
"details": {
"KEY": "1",
"NICKNAME": "XYZ",
"SEP_YR": "FY 2007"
},
"address": [
{
"ADDR_L1": "XYZ",
"ADDR_L2": "ABC",
"ADDR_L3": "",
"SMONTH": "12",
"SDAY": "02",
"EMONTH": "06",
"EDAY": "22",
"MODIFIED": false},
{
"ADDR_L1": "GHJ",
"ADDR_L2": "",
"ADDR_L3": "",
"SMONTH": "01",
"SDAY": "02",
"EMONTH": "08",
"EDAY": "21",
"MODIFIED": false}
]
}
$(function() {
var Address = function(options) {
ko.mapping.fromJS(options.data, {}, this);
var self = this;
self.SMMDD = ko.computed({
read: function() {
if ($.isFunction(self.SMONTH)) {
return self.SMONTH() + "/" + self.SDAY();
}
},
write: function(value) {
self.SMONTH(value.substring(0, 2));
self.SDAY(value.substring(2, 4));
},
owner: self
});
self.EMMDD = ko.computed({
read: function() {
if ($.isFunction(self.EMONTH)) {
return self.EMONTH() + "/" + self.EDAY();
}
},
write: function(value) {
self.EMONTH(value.substring(0, 2));
self.EDAY(value.substring(2, 4));
},
owner: self
});
//modified capture
self.changedFlag = new ko.changedFlag(self);
self.changedFlag.isChanged.subscribe(function(isChanged) {
if (isChanged) {
self.MODIFIED(true);
alert("DIRTY");
}
else {
self.MODIFIED(false);
alert("CLEAN");
}
});
}
var mappingoptions = {
"address": {
create: function(options) {
return new Address(options);
...