这可能是一个棘手的问题 - 我试图使用Twitter类型与Bloodhound引擎和自定义Knockout绑定。在我的例子中,我有两个运动员名单(足球和足球)。我使用预先输入从其中一个列表中选择一名运动员,并且我使用下拉列表选择要从哪个列表中选择。
从下拉列表中选择一项运动后,将使用适当的运动员初始化Bloodhound引擎,并创建预先输入。当这项运动发生变化时,会使用新的运动员名单创建一个新的Bloodhound引擎。 问题是预先输入仍然使用第一个运动员列表而不是新列表。
我已经调试过,我知道Bloodhound引擎会使用新列表重新创建,然后Twitter typeahead会获得更新的源代码。但是,唉,旧的名单在使用时会出现。我提交此fiddle作为证据 - 从不介意风格,是正在进行的工作。简要说明代码:
顶部是AthleteTypeahead
类,自定义athleteTypeahead
绑定(直接在类之后)创建初始化建议引擎和typeahead。底部是我的视图模型,它创建了两个不同的运动员名单。为了调试和我的理智,我已经显示了所选运动员的完整列表,并在每次创建新的Bloodhound建议引擎时将列表发送到console.log
- 两个列表都正确更新。我在创建新引擎时尝试调用clear()
和clearPrefetchCache()
,即使它是一个全新的引擎,但也没有运气。想法?
答案 0 :(得分:1)
将$(element).typeahead('destroy')
添加到AthleteTypeahead
构造函数中,即
var AthleteTypeahead = function(athletes, element) {
$(element).typeahead('destroy');
this.athletes = athletes;
this.element = element;
};
您无法在已有元素的元素上创建新的预先输入,您必须先处理第一个。您还可以在某处保存对Bloodhound引擎的引用,并使用clear
和add
函数更新引擎,而无需销毁和重新初始化整个类型。