Knockout.js mapping objet JSON Javascript Object

J'ai un problème de cartographie d'un objet Json reçu à partir du serveur dans un prédéfini Javascript objet qui contient toutes les fonctions nécessaires qui sont utilisés dans les liaisons

Code Javascript est le suivant

function Person(FirstName, LastName, Friends) {
    var self = this;
    self.FirstName = ko.observable(FirstName);
    self.LastName = ko.observable(LastName);
    self.FullName = ko.computed(function () {
        return self.FirstName() + ' ' + self.LastName();
    })
    self.Friends = ko.observableArray(Friends);
    self.AddFriend = function () {
        self.Friends.push(new Person('new', 'friend'));
    };
    self.DeleteFriend = function (friend) {
        self.Friends.remove(friend);
    };      
}

var viewModel = new Person();

$(document).ready(function () {
    $.ajax({
        url: 'Home/GetPerson',
        dataType: 'json',
        type: 'GET',
        success: function (jsonResult) {
            viewModel = ko.mapping.fromJS(jsonResult);
            ko.applyBindings(viewModel);
        }
    });
});

HTML:

<p>First name: <input data-bind="value: FirstName" /></p>
<p>Last name: <input data-bind="value: LastName" /></p>
<p>Full name: <span data-bind="text: FullName" /></p>
<p>#Friends: <span data-bind="text: Friends().length" /></p>
@*Allow maximum of 5 friends*@
<p><button data-bind="click: AddFriend, text:'add new friend', enable:Friends().length < 5" /></p>
<br>
@*define how friends should be rendered*@
<table data-bind="foreach: Friends">
    <tr>
        <td>First name: <input data-bind="value: FirstName" /></td>
        <td>Last name: <input data-bind="value: LastName" /></td>
        <td>Full name: <span data-bind="text: FullName" /></td> 
        <td><button data-bind="click: function(){ $parent.DeleteFriend($data) }, text:'delete'"/></td> 
    </tr>
</table>

Mon ServerSide MVC code pour obtenir des données initiales ressemble:

    public ActionResult GetPerson()
    {
         Person person = new Person{FirstName = "My", LastName="Name",
                        Friends = new List<Person>
                        {
                             new Person{FirstName = "Friend", LastName="Number1"},
                             new Person{FirstName = "Friend", LastName="Number2"}
                        }
        };
        return Json(person, JsonRequestBehavior.AllowGet);
    }

J'essaie d'utiliser le plugin de cartographie pour charger le Json dans mon objet Javascript donc tout ce qui est disponible pour les liaisons (Le complément de la fonction et les propriétés calculées sur l'Ami des objets).

Lorsque j'utilise le plugin de cartographie, il ne semble pas fonctionner.
Lorsque vous utilisez le plugin le AddFriend méthode n'est pas disponible lors de la liaison.
Est-il possible d'alimenter le JavaScript de la Personne objet en utilisant le plugin de cartographie ou tout doit être fait manuellement?

OriginalL'auteur DiederikTiemstra | 2012-01-10