KnockoutJS - observableArray and ko.mapping.fromJS

http://stackoverflow.com/questions/6637579/knockoutjs-observablearray-and-ko-mapping-fromjs

HTML

<script src="http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js"></script>
<script src="http://cloud.github.com/downloads/SteveSanderson/knockout/knockout-1.3.0beta.js"></script>
<script src="https://raw.github.com/SteveSanderson/knockout.mapping/master/build/output/knockout.mapping-latest.js"></script>
<table>
    <thead>
        <tr>
            <td></td>
            <td>Name</td>
            <td>Email Address</td>
            <td>Active?</td>
            <td>Created</td>
        </tr>
    </thead>
    <tbody data-bind="template: { name: 'userTemplate', foreach: users }">
        <script type="text/x-jquery-tmpl" id="userTemplate">
        <tr>
            <td class="quiet"><span data-bind="text: Id"></span></td>
            <td><span data-bind="text: Name"></span></td>
            <td><a data-bind="attr: { href: ('mailto:' + EmailAddress()) }"><span data-bind="text: EmailAddress"></span></a></td>
            <td>
                <a href="#"><span data-bind="text: IsActive"></span></a>
            </td>
            <td><span data-bind="text: CreatedDate"></span></td>
        </tr>
        </script>
    </tbody>
</table>

JavaScript

var viewModel = {
    users: ko.observableArray()
}

var userMapping = {
    key: function(item) {
        return ko.utils.unwrapObservable(item.Id);
    }
}

// JSON call replaced with values
viewModel.users = ko.mapping.fromJSON('[{"Id":1,"Name":"Andrew","EmailAddress":"[email protected]","IsActive":true,"CreatedDate":"1 Dec 2011"}]');

ko.applyBindings(viewModel);