ko.mapping.fromJS example for model

ko.mapping.fromJS example for model (with observables and computed)

by jwstott

HTML

<script src="http://ajax.aspnetcdn.com/ajax/knockout/knockout-2.2.0.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/knockout.mapping/2.3.4/knockout.mapping.js"></script>
<span data-bind="text:firstName"></span>
<hr/>



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

JavaScript

var raw = {userName:'fred',firstName:'Smith', lastName:'Sansders'};

var Instructor = function (obj) {
            var self = this;
            self.id = ko.observable(); // teacher.Id guid;
            self.studentIdentifier = ko.observable().extend({ required: true }); // teacher.TeacherID
            self.userName = ko.observable().extend({ required: true });
            self.organizationId = ko.observable();
            self.organizationName = ko.observable().extend({ required: true });
            self.firstName = ko.observable();
            self.lastName = ko.observable();
            self.middleInitial = ko.observable();
  self.setBind = function() {
    ko.mapping.fromJS(raw, {}, self);
  };
            //self.classes = ko.observableArray();
            // computed
            self.fullName = ko.computed(function() {
                  return this.firstName() + " " + this.lastName();
              }, self);
            self.socketId = ko.observable();  // socket.io socket.id
            self.cacheArchive = [];
            self.isBrief = ko.observable(true);
            // IF AN OBJECT was passed then initialize properties from that object
            if (obj) {
                for (var prop in obj) {
                    if (self.hasOwnProperty(prop)) {
                        if (ko.isObservable(prop))
                            self[prop](obj[prop]);
                        else
                            if (!ko.isComputed(prop))
                                self[prop] = obj[prop];
                    }
                }
            }
            return self;
        };

var testA = new Instructor();
ko.applyBindings(testA);

testA.firstName('Jimbo');
console.log(ko.toJSON(testA));

//ko.mapping.fromJS(raw, {}, testA);
//console.log(ko.toJSON(testA));
//var testB = new Instructor(testA);
//console.log(ko.toJSON(testB));