好的,我已经与这个问题斗争了几个小时,并将问题缩小到一个非常简单的Fiddle
问题是,当我在文本输入上使用 twitter bootstrap 的 typeahead 插件并进行选择时,KnockoutJS ViewModel 中的值不会更新。我知道我可以破解它来工作,但一定有一些我在这里遗漏的东西。
基本上我所拥有的是:
淘汰赛绑定
// Bind twitter typeahead
ko.bindingHandlers.typeahead = {
    init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
        var $element = $(element);
        var allBindings = allBindingsAccessor();
        var typeaheadArr = ko.utils.unwrapObservable(valueAccessor());
        $element.attr("autocomplete", "off")
                .typeahead({
                    'source': typeaheadArr,
                    'minLength': allBindings.minLength,
                    'items': allBindings.items,
                    'updater': allBindings.updater
                });
    }
};
淘汰视图模型
function MyModel(){
    var self = this;
    self.productName = ko.observable();
    self.availableProducts = ['One', 'Two', 'Three'];
}
ko.applyBindings(new MyModel());
HTML
<input type="text" data-bind="typeahead:availableProducts, value:productName"/>
其余的东西只是来自 Twitter Bootstrap。