mapping plugin

https://groups.google.com/d/topic/knockoutjs/wqLIB8H_pZ8/discussion

HTML

<script src="http://github.com/downloads/SteveSanderson/knockout/knockout-2.1.0.js"></script>
<script src="https://raw.github.com/SteveSanderson/knockout.mapping/master/build/output/knockout.mapping-latest.debug.js"></script>
<ul data-bind="template: { foreach: items }">
    <li><span data-bind="text: jobTitle"></span></li>
</ul>

<button data-bind="click: update">Update</button>

JavaScript

var data = [{"jobTitle":"Digital designer","dateCreated":"7/7/2012","timeCreated":"2:27 PM","location":"Perth","jobSummary":"one\ntwo\nthree","Uri":"/candidates/view-all-jobs/digital-designer/","CreateDate":"\/Date(1341635236000)\/"},{"jobTitle":"Presentation Specialist - desktop publisher","dateCreated":"7/7/2012","timeCreated":"2:26 PM","location":"Brisbane","jobSummary":"One-to-one support to VP\n    Truly diverse role\n    Very satisfying amount of autonomy and responsiblity!","Uri":"/candidates/view-all-jobs/presentation-specialist-desktop-publisher/","CreateDate":"\/Date(1341635201000)\/"},{"jobTitle":"Administration Manager","dateCreated":"7/7/2012","timeCreated":"2:23 PM","location":"Melbourne North Shore & Northern Beaches ","jobSummary":"One-to-one support to VP\n    Truly diverse role\n    Very satisfying amount of autonomy and responsiblity!","Uri":"/candidates/view-all-jobs/administration-manager/","CreateDate":"\/Date(1341634991000)\/"}];

var newdata = [{"jobTitle":"Sean designer","dateCreated":"7/7/2012","timeCreated":"2:27 PM","location":"Perth","jobSummary":"one\ntwo\nthree","Uri":"/candidates/view-all-jobs/digital-designer/","CreateDate":"\/Date(1341635236000)\/"}];

//for efficiency create this function once
var fullDate = function() {
    return this.dateCreated() + " " + this.timeCreated();
};

var mappingOptions = {
    create: function(options) {
       var result = ko.mapping.fromJS(options.data);
       result.fullDate = ko.computed(fullDate, result);
       return result;
    }        
};

var viewModel = {
    items: ko.mapping.fromJS(data, mappingOptions),
    update: function() {
       ko.mapping.fromJS(newdata, viewModel.items);
    }      
};


ko.applyBindings(viewModel);