Использование Visualsearch.js в каркасе backbone.js - PullRequest
1 голос
/ 29 ноября 2011

Прежде всего, спасибо ребятам из DocumentCloud за выпуск этих двух супер-полезных инструментов.

Вот мой вопрос (ы):

I 'Я пытаюсь использовать visulasearch.js в приложении backbone.js.

В моем приложении есть базовый файл index.html и файл javascript myapp.js, который содержит основное приложение, созданное с помощью backbone.js

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

  1. Должен ли я инициализировать поле поиска извне в myapp.jsв дополнительном js-файле или на моей странице index.html (как предложено в visualsearch mini.tutorial )?Или я должен инициализировать его в окне поиска (myapp.js)?Последнее решение кажется слишком сложным (это было то, что я пытался сделать, но даже когда мне это удалось, оно слишком сложное, и я потерял простоту bacbone mvc).

  2. Давайтескажем, мне удалось получить строку поиска в виде объекта JSON, например {name:'Fat DAvid', address:'24, slim st', phone:'0098876534287'}.После того, как это сделано, какую функцию я могу использовать для извлечения в коллекции только моделей, поля которых совпадают с заданной строкой.Я понимаю, что я должен сделать карту или фильтр, но эти функции, по-видимому, изначально служат для немного других задач.

    a.действительно ли это лучший способ отфильтровать результаты?Он взимает плату с клиента (который должен фильтровать результаты), в то время как создание нового запроса (представления или фильтра) к CouchDB будет довольно простым и, учитывая небольшой объем данных и низкую скорость доступа к сайту, не так дорого,Однако, выполняя все действия по фильтрации на стороне клиента, это намного проще, чем создавать новое представление (или список, или фильтры) в CouchDB и связывать его с представлением backbone.js

1 Ответ

1 голос
/ 30 ноября 2011

Вы можете инициализировать окно поиска VisualSearch.js прямо в вашем myapp.js. Просто убедитесь, что у вас есть ссылка на него, чтобы потом можно было извлечь фасеты и значения.

Например:

var visualSearch = VS.init({...})
// Returns the unstructured search query
visualSearch.searchBox.value() 
// "country: "South Africa" account: 5-samuel title: "Pentagon Papers""

// Returns an array of Facet model instances
visualSearch.searchQuery.facets()
// [FacetModel<country:"South Africa">, 
//  FacetModel<account:5-samuel>, 
//  FacetModel<title:"Pentagon Papers">]

Если у вас есть эти модели в коллекции Backbone, вы можете легко выполнить фильтр:

var facets = visualSearch.searchQuery.models;
_.each(facets, function(facet) {
    switch (facet.get('category')) {
        case 'country':
            CountriesCollection.select(function(country) { 
                return country.get('name') == facet.get('value'); 
            });
        break;
        // etc...
    }
});
...