让Bloodhound工作

时间:2014-08-12 03:45:59

标签: javascript jquery json typeahead.js bloodhound

我正在使用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中的一些数据,但它没有显示。我需要做些什么才能让它发挥作用?

1 个答案:

答案 0 :(得分:0)

您的JSON无效。

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

您还应该注意indicator_commands.initialize();将返回 根据猎犬文档的Promise,所以你无法保证在第二次拨打serialize()时它已经被初始化了。虽然修复的JSON代码对我有用,但您应该使用Promise

indicator_commands.initialize().then(function(b) {
     console.log('Success');
     console.log(indicator_commands.index.serialize());
},
function(e) { console.log('Error'); } );