2015-04-01 43 views
1

这可能是一个棘手的 - 我试图使用Twitter与血猎犬引擎和自定义敲除绑定的键入。在我的例子中,我有两个运动员名单(足球和足球)。我正在使用打字机从列表中选择一名运动员,并使用下拉菜单选择要从哪个列表中拉出。Twitter的键入与Bloodhound不刷新列表与敲除绑定

一旦从下拉列表中选择了一项运动,Bloodhound引擎就会被适当的运动员初始化,并创建打字头。当运动发生变化时,新的Bloodhound引擎会与新的运动员名单一起创建。这个问题是这个typeahead仍在使用第一个运动员列表而不是新列表。

我已经调试过了,我知道Bloodhound引擎会被新的列表重新创建,然后Twitter typeahead会得到更新的源代码。但是,唉,旧的列表使用时出现。我提交这个fiddle作为证据 - 没关系的风格,它一项工作正在进行中。简要说明代码:

顶部是AthleteTypeahead类,其中自定义的athleteTypeahead绑定(直接在类之后)创建以初始化建议引擎和键入。底部是我的观点模型,它创建了两个不同的运动员名单。为了调试和我的理智,我已经显示了选定运动员的完整列表,并在每当创建一个新的Bloodhound建议引擎时将列表发送到console.log - 两个列表都正确更新。在创建新引擎时,我尝试过拨打clear()clearPrefetchCache(),尽管它是一个全新的引擎,但在那里也没有运气。思考?

回答

1

添加$(element).typeahead('destroy')AthleteTypeahead构造,即

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

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