object references

http://stackoverflow.com/questions/11991588/knockoutjs-either-bound-value-not-updating-or-ko-computed-not-updating#11991588

by rniemeyer

HTML

<script src="http://knockoutjs.com/downloads/knockout-2.1.0.js"></script>
<ul data-bind="foreach: roles">
    <li data-bind="click: toggle">
       <span data-bind="text: id"></span>
       <span data-bind="visible: selected">*</span>
    </li>
 </ul>

JavaScript

var roles = [
     { id: 1 },
     { id: 2, selected: true },
     { id: 3 }
  ];

  var viewModel = (function (roles) {
     var obj = {};
     var arr = [];
     for (var i = 0; i < roles.length; i++) {
        arr.push({
           id: roles[i].id,
           selected: ko.observable(roles[i].selected || false),
           toggle: function () {
              this.selected(!this.selected());
           }
        });
     }
     obj.roles = ko.observable(arr);

     return obj;
  })(roles);

  var sectionManager=(function(){
     return {
        init: function (roles) {
           for (var i = 0; i < roles.length; i++) {
              var item = roles[i];
              item.selected.subscribe(function () {
                 console.log(this.id);  // ALWAYS 3!!
              }, item);
           }
        }
     };
  })();

  $(function () {
     sectionManager.init(viewModel.roles());
     ko.applyBindings(viewModel);
  });