为什么typeahead-js不能在Meteor上工作但是在本地工作?

时间:2013-11-13 04:15:31

标签: javascript meteor typeahead.js

我使用typeahead-js的设置如下。它在当地运作良好,没有任何问题。但是,当我部署到meteor时,它不再工作,因为基准是相同的,但是没有发生预先输入。

On Meteor.client:

Template.searchProfiles.rendered = function() {
    $('input#query').typeahead({
        name:'searchProfiles',
        local:searchProfilesDatums(),
    });
}

var searchProfilesDatums = function() {
    var datums = [];
    Profiles.find().forEach(function(profile) {
        tokens = profile.name.split(" ");
        datums.push({value:profile.name, nameRoute:profile.nameRoute, tokens:tokens});
    });
    return datums;
}

1 个答案:

答案 0 :(得分:1)

当您为typeahead基准面提供“name”属性 - it caches the datum,并且使用具有相同名称的另一个基准重新初始化任何类型,将重新使用该基准 - 包括本地值。

如果您正在远程运行 - 可以在集合中没有数据的情况下初始化第一个数据(例如,等待订阅),并忽略后续数据以支持缓存的数据。

可能的解决方案:

  • 删除基准名称,防止明确缓存
  • 每次都提供一个唯一的名称(坏主意,因为它们都被缓存)
  • 使用IronRouter,使用before / ready挂钩获取所需的数据/订阅
  • 使用typeahead的修改分支,允许计算回调(显然coming in version 0.10

我目前正在使用允许计算值的modified branch,但我有一些自己的曲折。