2015-03-20 1 views
1

У меня есть таблица, в которой я пытаюсь добавить фильтрацию в метеор по определенным полям и тегам. Прямо сейчас есть поле для каждой строки, которая называется race и against. Есть два элемента выбора над таблицей (race-select и against-select), которые вы можете использовать, чтобы отфильтровать, какие результаты в таблице вы хотите видеть, но код действительно неуклюжий, и если я хочу добавить дополнительную фильтрацию для других тегов, код просто собирается стать грязнее.Лучшая фильтрация для таблицы в метеоре

Некоторые из кода просто пытаются справиться с начальными значениями Сессии.

var racelist = ['zerg', 'terran', 'protoss']; 

Template.buildsList.helpers({ 
    builds : function() { 
    if (typeof(Session.get('race-select')) == 'undefined' || Session.get('race-select') == 'all races'){ 
     Session.set('race-select', racelist); 
    } 
    if (typeof(Session.get('against-select')) == 'undefined' || Session.get('against-select') == 'all races'){ 
     Session.set('against-select', racelist); 
    } 
    return Builds.find({race : {$in : Session.get("race-select")}, against : {$in : Session.get("against-select")}}, { sort: { createdAt: -1 } }); 
    } 
}); 

Template.buildsList.events({ 
    "change #race-select" : function(e){ 
    Session.set('race-select', [$(e.target).val().toLowerCase()]) 
    }, 
    "change #against-select" : function(e) { 
    Session.set('against-select', [$(e.target).val().toLowerCase()]) 
    } 
}) 

Существует много почти повторяющиеся строки, но я хочу знать, если есть лучший способ реализации такого рода функция фильтрации.

+0

Я настоятельно рекомендую использовать пакет Filter-Collections для любой фильтрации в метеор. Вы можете клонировать его из https://github.com/parhelium/filter-collections, есть несколько исправлений. После того, как вы клонируете, просто добавьте в каталог dir, чтобы сделать доступным сразу в вашем приложении meteor и введите meteor add parhelium: коллекции фильтров. –

ответ

0

Пакет, который я уже проверил, просто добавил поддержку пользовательских фильтров за последние пару дней. https://atmospherejs.com/aslagle/reactive-table. У вас может быть несколько настраиваемых фильтров, привязанных к одной таблице, и их гораздо проще в использовании.

код закончился выглядеть примерно так:

Template.raceFilter.created = function() { 
    this.filter = new ReactiveTable.Filter('race-filter', ['race']); 
}; 

Template.raceFilter.events({ 
    "change" : function(event, template) { 
     var input = $(event.target).val().toLowerCase(); 
     if(input != 'all races'){ 
      template.filter.set(input); 
     }else { 
      template.filter.set(""); 
     } 
    } 
}); 

raceFilter шаблон может быть какой-либо вход (выберите, текстовое поле, радио).

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