2013-05-01 4 views
4

Я пользуюсь официальным examples from Twitter. Основная проблема, я, вероятно, не знаю, как использовать монстра Хогана. JS сторона:Настройка типа Bootstrap Twitter

$("#search_name").typeahead({ 
    name: 'name', 
    remote: { 
     url: '/entities/search_autocomplete.json?query=%QUERY', 
     template: '<p><strong>{{id}}</strong> – {{name}}</p>', 
     engine: Hogan 
     } 
}); 

сервер возвращает данные в формате JSON, структура:

[{\"id\":1234,\"name\":\"Blah blah...\",\"tokens\":[\"blah...\",\"blah\"]}] 
+1

Это не похоже на JSON для меня. –

+0

Извините, это код Ruby, он преобразуется с to_json, а результат почти идентичен, т. Е. Все: asdf преобразуются в «asdf» и т. Д. Это просто читаемо, но в любом случае преобразует его в JSON. – valk

ответ

7

Просто взял этот код у одного из наших проектов, поможет вам понять, необходимую разметку преобразования внешние массивы JSON и вывода в пользовательские автозаполнения строки:

$('input').typeahead({ 
    header: 'Your Events', 
    template: [ 
    '<img class="ta-thumb" src="https://graph.facebook.com/{{id}}/picture?type=square" />', 
    '<p class="ta-h1">{{name}}</p>', 
    '<p class="ta-p">{{start_time}}</p>' 
    ].join(''), 
    limit: 3, 
    remote: { 
     url: 'https://graph.facebook.com/me/events?access_token=' + access_token, 
     filter: function(parsedResponse) { 
      var dataset = []; 
      for(i = 0; i < parsedResponse.data.length; i++) { 
       dataset.push({ 
        name: parsedResponse.data[i].name, 
        start_time: parsedResponse.data[i].start_time, 
        id: parsedResponse.data[i].id, 
        value: parsedResponse.data[i].name, 
        tokens: [parsedResponse.data[i].id, parsedResponse.data[i].name] 
       }); 
      } 
      return dataset; 
     }, 
    }, 
    engine: Hogan 
}); 

Вы должны загрузить Hogan.js шаблон компилятор и включить его в разметке (например, с использованием его как внешний скрипт или через загрузчик модуля, например Require.js). Затем будет установлена ​​переменная Hogan.

Я также рекомендую посмотреть, что Graph API call, чтобы лучше понять преобразование массива.

Надеюсь, это поможет :)

+0

Спасибо большое Райан. Я был немного смущен несколькими версиями typeahead, в конце концов, я использовал тот, который был из библиотеки Twitter по умолчанию на Github: https://github.com/twitter/bootstrap/blob/master/js/bootstrap-typeahead.js. Что смущает об этом - это когда вы загружаете TB из http://twitter.github.io/bootstrap/, он не включает typeahead. В любом случае, спасибо товарищу! – valk

+0

Боковое примечание: Bootstrap действительно включает Typeahead (я просто столкнулся с этим сейчас), но версия, которая включена, по крайней мере, несколько изменений назад. Это дает вам большую часть набора функций автоматического завершения, но ни один из данных по загрузке/предварительной выборке/локальному хранению. Я закончил работу с помощью customizer: http://twitter.github.io/bootstrap/customize.html и полностью отключил Typeahead на основе BS. –

+0

Несомненно, но поскольку ОП ссылался на документы Typeahead.js (http://twitter.github.io/typeahead.js), а не на собственную вилку Bootstrap, я не думал упоминать об этом. Если вы используете «typeahead.js» после «bootstrap.js», вы не будете сталкиваться с проблемами совместимости. –

Смежные вопросы