2012-02-02 5 views
1

Я заинтересован в использовании элемента управления visualsearch.js для своего веб-сайта, но, прочитав документацию, я все еще не понимаю, как эффективно получать данные сбора данных поиска. На основе этого примера выходная строка построена путем сериализации коллекции поиска. Тем не менее, мне было интересно, есть ли способ получить доступ к коллекции поиска более похожим на массив образом (так что для циклов/in можно использовать), вместо того, чтобы анализировать одну сериализованную строку. В конечном счете, мне нужно построить SQL-запросы из данных коллекции поиска.Как мы используем вывод visualsearch.js?

Если есть более эффективный или подходящий способ доступа к данным сбора данных поиска, пожалуйста, дайте мне знать!

Спасибо!

+0

Я успешно использую visualsearch.js в своем приложении, и у меня также возникли проблемы, связанные с этим. Однако я не уверен, чтобы понять, в чем проблема: вы не знаете, как использовать выход граней для фильтрации вашей коллекции? Можете ли вы привести пример? –

+0

Единственный вывод, с которым я знаком, это метод searchCollection.serialize(), но он не очень полезен для моих целей. Более подходящим было бы доступ к данным в более массивном стиле. Я совершенно новый для javascript, поэтому мне может не хватать некоторых основоположений ... Не могли бы вы подробнее рассказать о «выходе граней для фильтрации вашей коллекции»? – kaspnord

ответ

5

, насколько я знаю, что есть 2 способ получения данных от визуального поиска он также непосредственно поясняется в их документации в usage #4

  1. , как вы говорили, строковая версия поиска.

    visualSearch.searchBox.value(); 
    
    // returns: 'country: "United States" state: "New York" account: 5-samuel title: "Pentagon Papers"' 
    
  2. или фацетированный объект перебрать

    visualSearch.searchQuery.facets(); 
    
    // returns: [{"country":"United States"},{"state":"New York"},{"account":"5-samuel"},{"title":"Pentagon Papers"}] 
    

    , как вы можете видеть, этот вариант дает массив, за фаску, который фильтрует на, и для каждого актива значение, которое было введено ,

+0

Спасибо, что я и ищу. – kaspnord

3

mhmmm .. нормально, ответ не так прост. Я бы предложил вам получить некоторую практику с базовой структурой, просто внеся некоторые изменения в приложение todo-list. Это отличная стартовая точка. Таким образом, вы получите знакомы с некоторыми из замечательных backbone.js методов коллекций

Основная идея заключается в следующем: С visualsearch вы можете получить список «граней», то есть массив ключа/значения объектов.

var myFacets = visualSearch.searchQuery.facets(); 
//my facets is then something like [{"field1":"value1-a"},{"field2":"value2-c"}] 

после этого вы можете использовать myFacets элементы для iterativrely фильтрации вам коллекцию с WONDERFUL filter методом hinerithed из _underscore Lib.

Как это сделать? Вы можете использовать метод _.each в подчеркивании Lib

_.each(myFacets,function(facet){ 
       myCollection=myCollection.filter(function(item){ 
        return item.get(facet.get('category')) == facet.get('value'); 
        }); 
       }); 
      } 

Здесь используется метод фильтра Backbone.js, который возвращает только значения истинны в соответствии с вашей статьей. Таким образом, вы фильтруете свою коллекцию один раз для каждой отдельной грани. Это похоже на javascript: «Верните мне только элементы коллекции, которые соответствуют этим аспектам (значению)», и вы делаете это итеративно для всех разных аспектов, которые вы получили.

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

Ах .. последнее, просто испортить идеи :-): Visualsearch построен на backbone.js, а объект searchQuery - это всего лишь базовая коллекция, поэтому вы можете использовать методы и свойства базовая основа. Прочтите эту строку еще раз, если это не ясно, потому что это может быть ключевым моментом для будущих реализаций!:-)

Предлагаю вам посмотреть файл search_jquery.js в папке lib/js/models. Это очень интересно ...

+1

Отличное объяснение - спасибо! – kaspnord

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