knockout.js Filter array using dropdown

This demo shows you how to filter data using dropdown

by cgough

HTML

Type
<input data-bind="value: transferOptionsFilter"/>
<br/><br/>
<div data-bind="text: 'Address Book Options ' + transferOptionsFilter()"></div>
<ul data-bind="foreach: filteredAddressBookItems">
    <li data-bind="text: name"></li>
<li data-bind="text: type"></li>
</ul>

CSS

div { font-weight: bold; }

JavaScript

var ViewModel = function(data) {
    var self = this;
    self.transferOptionsFilter = ko.observable('');
    self.items = ko.observableArray(data.items);
    self.filteredAddressBookItems = ko.computed(function() {
        var filter = self.transferOptionsFilter();
        if (!filter || filter == "None") {
            return self.items();
        } else {
            return ko.utils.arrayFilter(self.items(), function(i) {
                return i.type == transferOptionsFilter;
            });
        }
    });
};


var initialData = {
    transferOptions: [{ name: "Corvette", type: "Old"},
           { name: "Charger", type: "Old"},
           { name: "Prius", type: "New"},
           { name: "Magnum", type: "New"},
           { name: "McLaren", type: "Super"},
           { name: "Saleen", type: "Super"}]
};

ko.applyBindings(new ViewModel(initialData));