Numbers get converted to strings

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

by rniemeyer

HTML

<script src="http://knockoutjs.com/downloads/knockout-3.2.0.js"></script>
<div data-bind="foreach: persons">
      <div>
        <input type="text" name="firstname" data-bind="value: firstname" />
        <input type="text" name="lastname" data-bind="value: lastname" />
        <input type="text" name="age" data-bind="numericValue: age" />
    </div>
</div>


    <hr/>


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

CSS

input { width: 75px; }

JavaScript

ko.bindingHandlers.numericValue = {
    init : function(element, valueAccessor, allBindings, data, context) {
        var interceptor = ko.computed({
            read: function() {
                return ko.unwrap(valueAccessor());
            },
            write: function(value) {
                if (!isNaN(value)) {
                    valueAccessor()(parseFloat(value));
                }                
            },
            disposeWhenNodeIsRemoved: element
        });
        
        ko.applyBindingsToNode(element, { value: interceptor }, context);
    }
};


var viewModel = {
    persons: ko.observableArray([{"firstname":"Kenneth","lastname":"None","age":ko.observable(37)},{"firstname":"Michael","lastname":"None","age":ko.observable(45)}]),
    save: function() {
            console.log('saving model with...');
            console.log(ko.toJS(viewModel));
    }
};
ko.applyBindings(viewModel);