JSFiddle - React, Tailwind, and code Playground
by rniemeyer
HTML
<link rel="stylesheet" href="http:////netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css">
<link rel="stylesheet" href="https://rawgithub.com/jharding/typeahead.js-bootstrap.css/master/typeahead.js-bootstrap.css">
<script src="http://ajax.aspnetcdn.com/ajax/knockout/knockout-3.0.0.debug.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/typeahead.js/0.9.3/typeahead.min.js"></script>
<form role="form">
<div class="row">
<div class="col-sm-4 form-group">
<input type="text" class="form-control" data-bind="typeahead: { name: 'sectionNames', local: options }, value: name" />
</div>
</div>
<div data-bind="foreach: sections">
<div class="row">
<div class="col-sm-4 form-group">
<input type="text" class="form-control" data-bind="typeahead: { name: 'sectionNames', local: $parent.options }, value: name" />
</div>
</div>
</div>
</form>
<pre data-bind="text: ko.toJSON($data, null, 2)"></pre>
JavaScript
ko.bindingHandlers.typeahead = {
init: function(element, valueAccessor) {
var options = ko.unwrap(valueAccessor()) || {},
$el = $(element),
triggerChange = function() {
$el.change();
}
$el.typeahead(options)
.on("typeahead:selected", triggerChange)
.on("typeahead:autocompleted", triggerChange);
ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
$el.typeahead("destroy");
$el = null;
});
}
};
ko.applyBindings({
options: [
"one",
"two",
"three",
"four"
],
name: ko.observable(),
sections: [
{ name: ko.observable(), other: "1234" },
{ name: ko.observable(), other: "5678" }
]
});