1

这可能是一个棘手的问题 - 我正在尝试将 Twitter 预输入与 Bloodhound 引擎和自定义 Knockout 绑定一起使用。在我的示例中,我有两个运动员名单(足球和足球)。我正在使用预输入从其中一个列表中选择一名运动员,并且我正在使用下拉列表来选择要从哪个列表中提取。

一旦从下拉列表中选择了一项运动,Bloodhound 引擎就会使用适当的运动员进行初始化,并创建预输入。更改运动时,将使用新的运动员列表创建新的 Bloodhound 引擎。问题是预输入仍然使用第一个运动员列表而不是新列表。

我已经调试过了,我知道 Bloodhound 引擎会使用新列表重新创建,然后 Twitter typeahead 会获取更新的源。但是很可惜,旧的列表在使用时会出现。我提交这个小提琴作为证据——别管风格,这一项正在进行的工作。简单解释一下代码:

顶部是AthleteTypeahead类,自定义athleteTypeahead绑定(直接在类之后)创建该类以初始化建议引擎和预先输入。底部是我的视图模型,它创建了两个不同的运动员列表。为了调试和我的理智,我已经在视图中显示了选定运动员的完整列表,并将列表发送到console.log每当创建新的 Bloodhound 建议引擎时 - 两个列表都正确更新。我试过打电话clear()clearPrefetchCache()在创建新引擎时,即使它是一个全新的引擎,但也没有运气。想法?

4

1 回答 1

1

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

var AthleteTypeahead = function(athletes, element) {
    $(element).typeahead('destroy');
    this.athletes = athletes;
    this.element = element;
};

您不能在已有的元素上创建新的 typeahead,您必须处理第一个。您还可以在某处保存对 Bloodhound 引擎的引用,并使用clearadd函数来更新引擎,而无需销毁和重新初始化整个预输入。

于 2015-04-01T05:31:40.310 回答