0

我正在使用Typeahead.js/Bloodhound在我的网站上实现打字建议功能,但我无法让 Bloodhound 工作。这是代码:

var indicator_commands = new Bloodhound({
    datumTokenizer: function(d) {
        return Bloodhound.tokenizers.whitespace(d.defaultInput);
    },        
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    prefetch: '/static/indicator.json',
});

console.log (indicator_commands.index.serialize());
indicator_commands.initialize();
console.log (indicator_commands.index.serialize());

这是indicator.json的一部分:

[
    {   "name": "sma",
        "fullname": "Smooth Moving Average",
        "parameter": "sma,period,applied_to_optional,#color_optional;",
        "defaultInput": "sma,14,close,#ababab;",
        "tokens" : ["sma,14,close,#ababab;"],
        "short_help": "",
        "long_help": "",
    },

    {   "name": "ema",
        "fullname": "Exponential Moving Average",
        "parameter": "ema,period,applied_to_optional,#color_optional;",
        "defaultInput": "ema,14,close,#ababab;",
        "tokens" : ["ema,14,close,#ababab;"],
        "short_help": "",
        "long_help": "",
    }
]

我期待一些数据,indicator_commands但它没有显示。我需要改变什么才能让它工作?

4

1 回答 1

0

您的 JSON 无效。

在对象的最小成员之后有一个逗号,即。"long_help" : "", 那是搞砸了bloodhoubd,你必须删除它。

您还应该注意根据 Bloodhound 文档indicator_commands.initialize();将返回 a Promise,因此您不能保证它实际上已在您第二次调用serialize(). 尽管 JSON 固定的代码对我有用,但您可能应该使用Promise

indicator_commands.initialize().then(function(b) {
     console.log('Success');
     console.log(indicator_commands.index.serialize());
},
function(e) { console.log('Error'); } );
于 2014-08-12T13:31:52.793 回答