Заставить Бладхаунда работать

Я реализую функцию подсказки ввода на своем веб-сайте, используя Typeahead.js/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());

Вот часть индикатора.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, но их не было. Что мне нужно изменить, чтобы заставить его работать?


person Nghung    schedule 12.08.2014    source источник


Ответы (1)


Ваш JSON недействителен.

У вас есть запятая после наименьшего члена объекта, т.е. "long_help" : "",, который портит работу Bloodhoubd, вы должны удалить его.

Вы также должны помнить, что indicator_commands.initialize(); вернет Promise в соответствии с документацией Bloodhound, поэтому у вас нет гарантии, что он действительно был инициализирован при втором вызове serialize(). Хотя код с исправлением JSON работал у меня, вам, вероятно, следует использовать Promise:

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