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);