Knockout Mapping - fromJS - failing on a simple example

Overflew picture Overflew · Sep 12, 2013 · Viewed 10.3k times · Source

I'm trying to figure out what I'm misunderstanding with Knockout's mapping library. I've stripped it down to a simple example, and still can get it to fail (rather, not update with the mapped variables) with the fromJS call.

What am I getting fundamentally wrong in this example?

// Here's my view model
var ViewModel = function() {
    this.firstName = ko.observable('first');
    this.lastName = ko.observable('last');
};

var myVM = new ViewModel();

ko.applyBindings(myVM); // Apply to Knockout (works)

myVM.lastName('maiden name'); // Test an update (works)

var newData = {firstName: 'new', lastName: 'person'};

// Try update the ViewModel
ko.mapping.fromJS(newData, myVM); //(No update, or error)

// Intended result - UI updates to 'new person'

And the corresponding view:

<div class='liveExample' >   
    <p>First name: <input data-bind='value: firstName' /></p> 
    <p>Last name: <input data-bind='value: lastName' /></p> 
</div>

My JS Fiddle example.

Answer

nemesv picture nemesv · Sep 12, 2013

The ko.mapping.fromJS handles the parameters a little bit tricky (see my answer here), so the second parameter is normally the mapping options:

ko.mapping.fromJS(newData, {} /* mapping options */, myVM); 

Demo JSFiddle.