Earlier this week, I wrote a post about two-way databinding with jQuery. I was looking for a fast & elegant way to do it, but I came up somewhat empty. A lot of what I was finding suggested using a different plug-in or framework, such as Knockout. I decided to give Knockout a whirl, and I’m an instant fan.
My favorite part is how the binding occurs declaratively in the HTML.
<input data-bind="checked: boolValue" type="checkbox" /> <input data-bind="value: textValue" />
That’s all you need to bind the values to the controls–nice, right!? Okay, but this is javascript, so what’s going on at the top? Surely, it’s a mess. Nope, it’s just as easy. Just create a view model and call Knockout’s applyBindings method.
var viewModel = {
boolValue: ko.observable(true),
textValue: ko.observable("Hello!")
};
ko.applyBindings(viewModel);
That’s it, I promise. To show that there’s nothing up my sleeve, here’s the entire page:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script src="Scripts/jquery-2.0.2.min.js"></script>
<script src="Scripts/knockout-2.2.1.js"></script>
<script type="text/javascript">
$(function () {
var viewModel = {
boolValue: ko.observable(true),
textValue: ko.observable("Hello!")
};
ko.applyBindings(viewModel);
});
</script>
</head>
<body>
<input data-bind="checked: boolValue" type="checkbox" />
<input data-bind="value: textValue" />
<div>The value of boolValue is <span data-bind="text: boolValue"></span></div>
<div>The value of textValue is <span data-bind="text: textValue"></span></div>
</body>
</html>
The Knockout site has really good interactive tutorials for getting started. If you’re interested in learning or exploring further, definitely start there.
2 thoughts on “Two-Way Databinding with Knockout”