1 ko.bindingHandlers['selectedOptions'] = {
2 'init': function (element, valueAccessor, allBindingsAccessor) {
3 ko.utils.registerEventHandler(element, "change", function () {
4 var value = valueAccessor(), valueToWrite = [];
5 ko.utils.arrayForEach(element.getElementsByTagName("option"), function(node) {
7 valueToWrite.push(ko.selectExtensions.readValue(node));
9 ko.expressionRewriting.writeValueToProperty(value, allBindingsAccessor, 'value', valueToWrite);
12 'update': function (element, valueAccessor) {
13 if (ko.utils.tagNameLower(element) != "select")
14 throw new Error("values binding applies only to SELECT elements");
16 var newValue = ko.utils.unwrapObservable(valueAccessor());
17 if (newValue && typeof newValue.length == "number") {
18 ko.utils.arrayForEach(element.getElementsByTagName("option"), function(node) {
19 var isSelected = ko.utils.arrayIndexOf(newValue, ko.selectExtensions.readValue(node)) >= 0;
20 ko.utils.setOptionNodeSelectionState(node, isSelected);