How can I use knockout's $parent/$root pseudovariables from inside a .computed() observable?

http://stackoverflow.com/questions/8640748/how-can-i-use-knockouts-parent-root-pseudovariables-from-inside-a-computed

by rniemeyer

HTML

<script src="http://knockoutjs.com/downloads/knockout-2.2.1.js"></script>
<ul data-bind="foreach: items">
    <li data-bind="css: { selected: isSelected }">
        <a href="#" data-bind="text: name, click: $root.selectedItem"></a>
    </li>
</ul>

<hr/>

<div data-bind="text: ko.toJSON($root)"></div>

CSS

.selected { background-color: #ccc; }

JavaScript

var Item = function(name) {
   this.name = ko.observable(name);  
   this.isSelected = ko.computed(function() {
       return this === viewModel.selectedItem();        
   }, this);
};

var viewModel = {
    selectedItem: ko.observable(),
    items: ko.observableArray() 
};

viewModel.items([ 
    new Item("one"),
    new Item("two"),
    new Item("three")
  ]);
  

ko.applyBindings(viewModel);