2016-03-30 2 views
0

Я играл с каждой настройкой, о которой я могу думать, например, .clear() и .typeahead('destroy'), и как только я установил источник как удаленный, я не могу сделайте typeahead использовать локальный источник.Переключение между удаленными и локальными источниками с помощью Typeahead.js/Bloodhound.js

Любые мысли?

Вот код ниже, вызывается onclick:

var create_typeahead = function(is_remote, titles){ 

    filters_typeahead.typeahead('destroy'); 

    if(is_remote){ 
     var remote_url = titles; 
     var titles = new Bloodhound({ 
     queryTokenizer: Bloodhound.tokenizers.whitespace, 
     datumTokenizer: Bloodhound.tokenizers.whitespace, 
      remote: { 
       url: remote_url, 
       q=%QUERY', 
       wildcard: '%QUERY' 
      } 
     }); 
    } 
    else{ 
     var titles0 = titles; 
     var titles = new Bloodhound({ 
     queryTokenizer: Bloodhound.tokenizers.whitespace, 
     datumTokenizer: Bloodhound.tokenizers.whitespace, 
      local: titles0 
     });  
    } 

    titles.initialize(); 

    filters_typeahead.typeahead({ 
    highlight: true, 
    minLength: 2, 

    }, 
    { 
     name: 'titles', 
     displayKey: 'name', 
     source: titles, 
     templates: { 
     suggestion: function(data) { 
      return '<div>' + data.name + '</div>'; 
     } 
    } 
}); 

};

+0

Я неправильно понял ваш вопрос. Переключение с удаленных на локальные, а не из удаленных источников. Если есть причина, по которой вы не просто используете удаленный или локальный? Любой может обрабатывать функцию для возврата данных. – whipdancer

+0

У меня есть несколько типов, которые я переключаю между ними. –

+0

Можете ли вы рассказать об этом немного? Вам нужно использовать ищейку? Если вы можете просто определить свой источник для typeahead как функции, вы можете иметь дело с получением любых данных (локальный json, ajax-вызов и т. Д.) С помощью этой функции. – whipdancer

ответ

1

Мой ответ немного больше, чем ваш, но, надеюсь, он укажет вам в правильном направлении.

Если вы хотите изменить источник remote с помощью bloodhound, вам придется очистить объект ищейки и повторно инициализировать его.

Здесь я создаю инициализацию Bloodhound экземпляра:

var taSource = new Bloodhound({ 
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('Value'), 
    queryTokenizer: Bloodhound.tokenizers.whitespace, 
    identify: function(obj) { 
    return obj.Value; 
    }, 
    remote: remoteSrc 
}); 

taSource.initialize(true); 

В логике для переключения я называю как clear() и initialize(true), проходя верно для REINITIALIZE параметра Я:

taSource.clear(); 
taSource.initialize(true); 

I ручки меняющегося URL-адрес в методе prepare, который доступен как часть объекта remote.

prepare: function(query, settings) { 
    settings.url = urlRoot + '/' + whichType + '?q=' + query; 
    console.log(settings.url); 
    return settings; 
}, 

Here is a full example показать, как я его обрабатываю.