1

Я использую Search Source и Flow Router от Arunoda. Они оба отлично работают, но я просто пытаюсь заставить их работать вместе.Поиск по URL-адресу Параметры запроса на поточном маршрутизаторе

У меня есть помощник, который возвращает некоторые документы, оказываемые с сервером запустить SearchSource метода как это:

Template.search.helpers({ 
    things: function() { 
    var currentUserId = Meteor.userId(); 
    var langParam = FlowRouter.current().queryParams.lang; 
    console.log(langParam); 
    return BookSearch.getData({ 
     sort: {date_added: -1} 
    }); 
    } 
}); 

Как вы видите, я просто пытаюсь искать вещи, которые зарегистрированы на языке введенного на URL (например, 'en') в качестве параметра запроса. Скажем, в «английском», как в этом примере:

http://localhost:3000/search?lang=en 

Я прекрасно читать «ан» и войти в консоль, используя код, но он не работает поиск с. Я имею в виду из-за этого кода:

var langParam = FlowRouter.current().queryParams.lang; 
console.log(langParam); 

Я получаю «en», напечатанный на консоли браузера. Но я не получаю то, что зарегистрировано на языке «en».

Итак, как я могу добиться правильного поиска с использованием параметров запроса?

Что мне нужно знать, так это то, как вводить в хелпер, чтобы отображать только данные, которые извлекают из условия, которое я хочу (в данном случае, английский язык - {lang: langParam}. Для этого используется API Package.getData(), но Я не мог точно определить, как именно.

ответ

1

Прежде всего, searchsource настраивает для вас необходимую доставку данных, поэтому вам не нужно создавать публикации или подписки для вашего потока поиска. как pub/sub работает в Meteor, поэтому я перейду к вашей проблеме с поисковыми запросами.

Я вижу, что вы хотите scope ваш поиск определенный язык. Вот базовая настройка, которая заставит вас идти. Вы должны также тонкая настройка вещь, как дросселирования, обработка метаданных, ограничение, пейджинг, вход и пары запроса обеззараживание, результат преобразования и т.д.

Шаблон

<template name="booksearch"> 
    <form name="booksearch"><input type="search"/></form> 
    <ul> 
    {{#each hits}} 
     <li>{{title}}</li> 
    {{#each}} 
    </ul> 
</template> 

Клиент: настроить ваш помощник

var options = { 
    // cache the search results for 5 minutes 
    keepHistory: 1000 * 60 * 5, 
    // allow fast local searches on the cache 
    localSearch: true 
}; 
// feed the search to the title field only 
var fields = ['title']; 
// Set up your search 
BookSearch = new SearchSource('books', fields, options); 

/* 
    get the search results reactively. mind you, this is not an invocation. 
    you'll invoke the search within your event handler down below 
*/ 
Template.booksearch.helpers({ 
    hits : function() { 
    return BookSearch.getData(); 
    } 
}) 

Template.booksearch.events({ 
    'submit form': function(e,t) { 
    // listen for the submit event 
    e.preventDefault(); 
    var options = { 
     // this is your lang query param from the url 
     lang: FlowRouter.getQueryParam('lang') 
    }; 
    // value of the search input from your template 
    var searchText = t.$('input').val(); 
    // invoke the search using the input and the language 
    BookSearch.search(searchText,options); 
    } 
}) 

Сервер: настройка поиска

SearchSource.defineSource('books', function(searchText, options) { 
    // make sure you do have a lang option or use a default one 
    var lang = options.lang || 'english' 
    if(searchText) { 
    var regExp = buildRegExp(searchText); 
    // use the input and lang to build your mongodb selector 
    var selector = {title: regExp, language: lang}; 
    return Books.find(selector).fetch(); 
    } else { 
    // don't return anything if nothing is searched for 
    return []; 
    } 
}); 

function buildRegExp(searchText) { 
    // copied over from the naive github example 
    var parts = searchText.trim().split(/[ \-\:]+/); 
    return new RegExp("(" + parts.join('|') + ")", "ig"); 
} 
+0

Ты потрясающий! Замечательно! : D – Emo

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

  • Нет связанных вопросов^_^