Knockout.js TwitterTypeahead和Hound不会使用敲除绑定刷新列表

Knockout.js TwitterTypeahead和Hound不会使用敲除绑定刷新列表,knockout.js,typeahead.js,bloodhound,Knockout.js,Typeahead.js,Bloodhound,这可能是一个棘手的问题——我正在尝试将Twitter typeahead与猎犬引擎和定制的击倒绑定一起使用。在我的例子中,我有两个运动员名单,足球和足球。我用一个typeahead从一个列表中选择一个运动员,我用一个下拉列表来选择从哪个列表中选择 从下拉列表中选择一项运动后,将使用适当的运动员初始化猎犬引擎,并创建typeahead。当这项运动被改变时,一个新的猎犬引擎将与新的运动员名单一起创建。问题是,typeahead仍在使用第一份运动员名单,而不是新名单 我已经调试过了,我知道猎犬引擎会用

这可能是一个棘手的问题——我正在尝试将Twitter typeahead与猎犬引擎和定制的击倒绑定一起使用。在我的例子中,我有两个运动员名单,足球和足球。我用一个typeahead从一个列表中选择一个运动员,我用一个下拉列表来选择从哪个列表中选择

从下拉列表中选择一项运动后,将使用适当的运动员初始化猎犬引擎,并创建typeahead。当这项运动被改变时,一个新的猎犬引擎将与新的运动员名单一起创建。问题是,typeahead仍在使用第一份运动员名单,而不是新名单

我已经调试过了,我知道猎犬引擎会用新列表重新创建,然后Twitter typeahead会得到更新的源代码。但遗憾的是,旧的列表在使用时会出现。我将此作为证据提交-别管风格,这是一项正在进行的工作。要简要解释代码,请执行以下操作:

顶部是AthleteTypeahead类,该类后面的自定义AthleteTypeahead绑定直接创建该类以初始化建议引擎和typeahead。底部是我的视图模型,它创建了两个不同的运动员列表。为了调试和保持理智,我在视图中显示了所选运动员的完整列表,并在创建新的猎犬建议引擎时将该列表发送到console.log-两个列表都会正确更新。我尝试在创建新引擎时调用clear和clearPrefetchCache,尽管这是一个全新的引擎,但也没有运气。想法?

将$element.typeahead'destroy'添加到您的AthleteTypeahead构造函数中,即

var AthleteTypeahead = function(athletes, element) {
    $(element).typeahead('destroy');
    this.athletes = athletes;
    this.element = element;
};
您不能在已有类型的元素上创建新的typeahead,必须先处理第一个。您还可以将对侦探犬引擎的引用保存在某处,并使用clear和add函数更新引擎,而无需销毁并重新初始化整个typeahead