Поиск и сортировка на одной странице

#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.