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