使用Bloodhound的Twitter预订并没有使用Knockout绑定刷新列表

时间:2015-04-01 03:25:21

标签: knockout.js typeahead.js bloodhound

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

从下拉列表中选择一项运动后,将使用适当的运动员初始化Bloodhound引擎,并创建预先输入。当这项运动发生变化时,会使用新的运动员名单创建一个新的Bloodhound引擎。 问题是预先输入仍然使用第一个运动员列表而不是新列表。

我已经调试过,我知道Bloodhound引擎会使用新列表重新创建,然后Twitter typeahead会获得更新的源代码。但是,唉,旧的名单在使用时会出现。我提交此fiddle作为证据 - 从不介意风格,正在进行的工作。简要说明代码:

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

1 个答案:

答案 0 :(得分:1)

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

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

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