Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript meteor中表格的更好过滤_Javascript_Optimization_Meteor - Fatal编程技术网

Javascript meteor中表格的更好过滤

Javascript meteor中表格的更好过滤,javascript,optimization,meteor,Javascript,Optimization,Meteor,我有一个表,我正试图通过某些字段和标记在meteor中添加过滤。现在,每一行都有一个字段,名为race和对。表格上方有两个select元素(race select和对select),您可以使用它们筛选出表格上您想要查看的结果,但代码非常笨拙,如果我想为其他标记添加更多筛选,代码将变得更加混乱 有些代码只是试图处理会话的初始值 var racelist = ['zerg', 'terran', 'protoss']; Template.buildsList.helpers({ builds

我有一个表,我正试图通过某些字段和标记在meteor中添加过滤。现在,每一行都有一个字段,名为
race
。表格上方有两个select元素(
race select
对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()])
  }
})

有很多几乎重复的行,但我想知道是否有更好的方法实现这种过滤功能

我已经签出的一个包在过去几天中刚刚添加了对自定义过滤器的支持。您可以将多个自定义筛选器绑定到一个表,这样使用起来就简单多了

代码最终看起来像这样:

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
模板可以是任何类型的输入(选择、文本框、收音机)。

我强烈建议在meteor中使用Filter Collections软件包进行任何类型的过滤。您可以从中克隆它,几乎没有错误修复。克隆后,只需添加到packages目录,即可在meteor应用程序中立即访问,并键入meteor add Parhemia:filter collections。