JSFiddle - React, Tailwind, and code Playground

by NoseBagUK

HTML

<script src="http://ajax.aspnetcdn.com/ajax/knockout/knockout-2.2.1.js"></script>
<div class="viewPerson">
    <strong>Name:</strong> <span data-bind="text: Person.Name"></span>
</div>
<br /><br /><br />
<div class="editPerson">
    <strong>Name:</strong> <input type="text" data-bind="value: PersonEdit.Name"></span>
    <input type="submit" value="Save" data-bind="click: Save" />
</div>

JavaScript

$(function () {
    var person = function() {
        var self = this;
        self.Name = ko.observable("Bob"); 
    }
    var viewModel = function(pers, copy) {
        var self = this;
        self.Person = pers;
        self.PersonEdit = copy;
        self.Save = function() {
           $.ajax({
                url: "/echo/json/",
                type: "POST",
                dataType: "json",
                contentType: "application/json;charset=utf-8",
                data: JSON.stringify(self),
                success: function (data) {
                      syncObservableObjects(self, "PersonEdit", "Person");
                }
            }); 
        };
    };
    var thisPerson = new person();
    var thisPersonCopy = new person();
    var thisModel = new viewModel(thisPerson, thisPersonCopy);
    ko.applyBindings(thisModel);
});
var syncObservableObjects = function (objToUpdate, sourceObjectName, destObjectName) {
    var sourceObject = eval("objToUpdate." + destObjectName);
    for (var key in sourceObject) {
        //if (key.left(1) != "_") {
            var thisObj = eval("objToUpdate." + destObjectName + "." + key);
            if (isFunction(thisObj)) {
                eval("objToUpdate." + destObjectName + "." + key + "(objToUpdate." + sourceObjectName + "." + key + "())");
            }
            else {
                var objToUpdate2 = eval("objToUpdate." + destObjectName + "." + key);
                syncObservableObjects(objToUpdate, sourceObjectName + "." + key, destObjectName + "." + key);
            }
        //}
    }
}
var isFunction = function (object) {
    return object instanceof Function;
}