允许用户过滤 MeteorJS 中数据集合中包含的数据

Allow users to filter data contained in the data collection in MeteorJS

你好应用程序必须允许用户过滤数据集合中包含的数据。过滤器必须由复选框支持。用户选择(复选框)它感兴趣的数据(姓名、地址...)并提交您的选择。下面的 table 显示从数据集合中选择的数据。

有没有人知道从数据集合中检索数据的代码应该是什么样子,同时考虑到用户进行的过滤。

我的想法是。获取复选框的值并将它们保存在数组中,稍后在代码中包含数组中的数据以使用子程序 find() 从集合中检索数据。

'change .cd-checkbox-1': function(event, target) {
var x = event.target.checked;
Session.set("statevalue", x);
var array    = [];
if (Session.get("statevalue") === true) {
    $( "[name='inputCheckboxPodmiot']:checked" ).each( function( index, element ) {
      array.push( element.value );
    });
};
var arrayLength = array.length;
for (var i = 0; i < arrayLength; i++) {
    var abiRejestr = WkaRejestrAbi.find( {}, { fields: { array[i]: 1 } } );
}
}

一种方法是使用 Reactive Vars。不建议使用会话,因为它们会污染全局命名空间。

示例代码:

在main.html

<template name="test">
     <input type="checkbox" id="checkbox1" name="name" value="data">Check Me
     <input type="checkbox" id="checkbox2" name="name" value="data">Check Me2
     <input type="checkbox" id="checkbox3" name="name" value="data">Check Me2
      {{showData}}
</template>

在Main.js

 var check_status='';
 //Reactive Var Initialization
 Template.main.onCreated(function (){
       check_status1=new ReactiveVar({});
       check_status2=new ReactiveVar({});
       check_status3=new ReactiveVar({});

 });

 Template.main.helpers({
       showData : function(){
           return Collection.find({$and : [{check_status1.get(),check_status2.get(),check_status3.get()}]}).fetch();
       }
 });

 Template.main.events({
      "change #checkbox1" : function(event) {
            if($(event.currentTarget).is(":checked").val())
              check_status1.set({field1: 'data1'});
            else
               check_status1.set({});
       },
       "change #checkbox2" : function(event) {
            if($(event.currentTarget).is(":checked").val())
              check_status2.set({field2: 'data2'});
            else
               check_status2.set({});
       },
       "change #checkbox3" :function(event) {
            if($(event.currentTarget).is(":checked").val())
               check_status3.set({field3: 'data2'});
            else
               check_status3.set({});
       },
 });

解释:

当我们初始化反应变量 check_status 时,我们将值设置为 {}。在助手中,在渲染时,相同的数据被传递给查询 Collection.find(check_status.get()),这与 show all data.

一样好

只要您单击复选框,就会触发 Template.main.events 中描述的事件,将 check_status 的值设置为 {field: data}。因为,这是一个 反应式变量 showData 模板是 运行 而这次查询是 Collection.find({field: data}),所以只有字段,其中 field 匹配 'data' 被返回。

在使用这些命令之前,您需要添加 reactive var 程序包 (meteor add reactive-var)。

或者,如果您想继续使用 session 变量,您也可以使用 Tracker.autorun