KnockoutJs 1.3 mapping issue

https://groups.google.com/d/topic/knockoutjs/SPrzcgddoY4/discussion

by rniemeyer

HTML

<script src="http://knockoutjs.com/downloads/knockout-2.2.1.js"></script>
<input data-bind="value: myValue()" />
<hr/>
<div data-bind="text: myValue()"></div>

<hr/>

myValue Reads: <span data-bind="text: myValue.reads"></span><br/>
myValue Writes: <span data-bind="text: myValue.writes"></span><br/>


<hr/>
Bind value 2? <input type="checkbox" data-bind="checked: bindValue2" />

<div data-bind="if: bindValue2">
    <input data-bind="value: myValue2()" />
    <hr/>
    <div data-bind="text: myValue2()"></div>
</div>



<hr />

myValue2 Reads: <span data-bind="text: myValue2.reads"></span><br/>
myValue2 Writes: <span data-bind="text: myValue2.writes"></span><br/>

JavaScript

function trackedObservable(initialValue) {
  var _value = ko.observable(initialValue),
      _reads = ko.observable(0),
      _writes = ko.observable(0),      
      result = function() {
          //don't want to depend on _reads.  would not need to do this, if _reads was not observable
          setTimeout(function() { _reads(_reads() + 1); }, 0); 
         return _value;
      }
      
      _value.subscribe(function() {
         _writes(_writes() + 1); 
      });
      
      result.reads = _reads;
      result.writes = _writes;
       
      return result;
}

var viewModel = {
    myValue: trackedObservable("Bob"),
    myValue2: trackedObservable("Ted"),
    bindValue2: ko.observable(false) 
};
   

ko.applyBindings(viewModel);