Skip to content

Instantly share code, notes, and snippets.

@kingbuzzman
Created August 23, 2011 19:58
Show Gist options
  • Select an option

  • Save kingbuzzman/1166331 to your computer and use it in GitHub Desktop.

Select an option

Save kingbuzzman/1166331 to your computer and use it in GitHub Desktop.
knockout -- how you should really do it.
<!DOCTYPE html>
<html>
<head>
<title>Example 3.b</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.js" type="text/javascript" charset="ISO-8859-1"></script>
<script src="https://raw.github.com/jquery/jquery-tmpl/master/jquery.tmpl.min.js" type="text/javascript"></script>
<script src="http://github.com/downloads/SteveSanderson/knockout/knockout-1.2.1.js" type="text/javascript" charset="ISO-8859-1"></script>
<script type="text/javascript">
$(document).ready(function(){
// controller
var viewController = new (function(){
this.name = ko.observable();
this.phone = ko.observable();
this.selected = ko.observableArray();
this.list = ko.dependentObservable(function(){
var itemLabels = $("#label_items");
var items = [];
// adds binding (hack)
if(this.selected().length == 0) return items;
$("#items").children().map(function(index,item){
item = $(item);
if(item.attr("selected")){
items.push(item.html());
}
});
return items;
}.bind(this));
this.total = ko.dependentObservable(function(){
if(this.selected().length == 0)
return 0;
// sums all the values together
return this.selected().reduce(function(a, b){
return parseFloat(a) + parseFloat(b);
});
}.bind(this));
return this;
})();
ko.applyBindings(viewController);
});
</script>
<script type="text/html" id="newsButton">
<li>${ this.data }</li>
</script>
</head>
<body>
<div>
<label for="name">Name: </label>
<input name="name" id="name" type="text" data-bind="value: name, valueUpdate: 'keyup'"><br>
<label for="phone">Phone: </label>
<input name="phone" id="phone" type="text" data-bind="value: phone, valueUpdate: 'keyup'"><br>
<label for="items">Items<label>
<select name="items" id="items" multiple="multiple" size="5" data-bind="selectedOptions: selected">
<option value="5.00">$5.00 Cheese burger</option>
<option value="7.00">$7.00 1lb Cheese burger</option>
<option value="3.00">$3.00 Fries</option>
<option value="2.00">$2.00 Soda</option>
<option value="8.00">$8.00 Cheese burger combo</option>
</select>
</div>
<br><br>
Checkout for <strong data-bind="text: name"></strong><br>
Call: <strong data-bind="text: phone"></strong><br>
Order:<br>
<ul id="label_items" data-bind="template: { name: 'newsButton', foreach: list }"></ul><br>
Total $: <strong data-bind="text: total"></strong>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment