#meteor
#метеор
Вопрос:
Я пытаюсь реализовать сортировку и поиск по своим элементам, поэтому я начал с сортировки, и это работает:
Шаблон
<button class="sort">Sort</button>
{{#each cvs}}
{{> Interviu}}
{{/each}}
JS:
Template.Interviuri.onCreated(function () {
var self = this
self.autorun(function () {
self.sortOrder = new ReactiveVar(-1)
})
Template.Interviuri.helpers({
cvs() {
const instance = Template.instance()
return Cvs.find({}, { sort: { createdAt: instance.sortOrder.get() } })
},
})
Template.Interviuri.events({
'click .sort'(event, instance) {
instance.sortOrder.set(instance.sortOrder.get() * -1)
Затем я хотел реализовать поиск на той же странице. Поэтому лучшим способом, который я мог найти, был EasySearch.
Но использование EasySearch означает, что я должен изменить способ отображения моих элементов. И тогда сортировка больше не работает.
Шаблон
<div class="searchBox pull-right">
{{> EasySearch.Input index=cvsIndex attributes=searchAttributes }}
</div>
{{#EasySearch.Each index=cvsIndex }}
{{> Interviu}}
{{/EasySearch.Each}}
Коллекция
CvsIndex = new EasySearch.Index({
collection: Cvs,
fields: ['name'],
engine: new EasySearch.Minimongo()
})
JS
cvsIndex: () => CvsIndex,
Как я могу одновременно выполнять поиск и сортировку?
Ответ №1:
С помощью EasySearch вы можете использовать два метода для своего индекса, а именно getComponentDict()
и getComponentMethods()
.
С getComponentDict()
помощью вы можете получить доступ к определению и параметрам поиска:
index.getComponentDict().get('searchDefinition');
index.getComponentDict().get('searchOptions');
У вас также есть соответствующие настройки для изменения определения / параметра поиска.
getComponentMethods
имеет такие методы, как
index.getComponentMethods().loadMore(integer);
index.getComponentMethods().hasMoreDocuments();
index.getComponentMethods().addProps(prop, value);
index.getComponentMethods().removeProps([prop])
Исходя из этого, вы можете задать свой реквизит, скажем index.getComponentMethods().addProp('sort', -1)
, а затем в определении индекса в вашем движке MongoDB установите сортировку из этого реквизита:
index = new EasySearch.index({
// other parameters
engine: new EasySearch.MongoDB({
sort: function(searchObject, options) {
if(options.search.props.sort) {
return parseInt(options.search.props.sort);
}
return 1;
}
})
});
Дополнительные сведения см. в разделе Поисковые системы EasySearch.