Mongodb 加载模板后,如何将筛选结果应用于模板?
下面是一个简单的例子:Mongodb 加载模板后,如何将筛选结果应用于模板?,mongodb,templates,meteor,datacontext,Mongodb,Templates,Meteor,Datacontext,下面是一个简单的例子: <template name="mealsList"> <div class="meals"> {{#each meals}} {{> mealItem}} {{/each}} </div> </template> Template.mealsList.helpers({ meals: function() { return Meals.find({}, { sort:
<template name="mealsList">
<div class="meals">
{{#each meals}}
{{> mealItem}}
{{/each}}
</div>
</template>
Template.mealsList.helpers({
meals: function() {
return Meals.find({}, { sort: { eatenAt: -1 }});
}
});
Template.mealsList.events({
'click .run-filter': function(e) {
var dateFrom = new Date(moment($('[name=dateFrom]').val()));
var dateTo = new Date(moment($('[name=dateTo]').val()));
builtTimeFrom = "01/01/2015 " + $('[name=timeFrom]').val();
builtTimeTo = "01/01/2015 " + $('[name=timeTo]').val();
var timeFrom = new Date(moment(builtTimeFrom));
var timeTo = new Date(moment(builtTimeTo));
Meteor.call('filterMeals', dateFrom, dateTo, timeFrom, timeTo, function(error, result) {
if (error)
return throwError(error.reason);
console.log(result);
// How can I apply result to the template?
});
}
});
使用a,您可以执行以下操作:
<template name="mealsList">
<div class="meals">
{{#each meals}}
{{> mealItem}}
{{/each}}
</div>
</template>
Template.mealsList.onCreated(function() {
this.meals = new ReactiveVar(Meals.find({}, { sort: { eatenAt: -1 }}));
});
Template.mealsList.helpers({
meals: function() {
return Template.instance().meals.get();
}
});
Template.mealsList.events({
'click .run-filter': function(e, temp) {
var dateFrom = new Date(moment($('[name=dateFrom]').val()));
var dateTo = new Date(moment($('[name=dateTo]').val()));
builtTimeFrom = "01/01/2015 " + $('[name=timeFrom]').val();
builtTimeTo = "01/01/2015 " + $('[name=timeTo]').val();
var timeFrom = new Date(moment(builtTimeFrom));
var timeTo = new Date(moment(builtTimeTo));
Meteor.call('filterMeals', dateFrom, dateTo, timeFrom, timeTo, function(error, result) {
if (error)
return throwError(error.reason);
temp.meals.set(result);
});
}
});
{{{每餐}
{{>mealItem}
{{/每个}}
Template.mealsList.onCreated(函数(){
this.fines=newreactivevar(finds.find({},{sort:{eatenAt:-1}));
});
Template.mealsList.helpers({
膳食:功能(){
返回Template.instance().founds.get();
}
});
Template.mealsList.events({
“单击。运行筛选器”:函数(e、temp){
var dateFrom=新日期(时刻($('[name=dateFrom]').val());
var dateTo=新日期(时刻($('[name=dateTo]')。val());
builtTimeFrom=“01/01/2015”+$('[name=timeFrom]')。val();
builtTimeTo=“01/01/2015”+$('[name=timeTo]')。val();
var timeFrom=新日期(时刻(builtTimeFrom));
var timeTo=新日期(时刻(builtTimeTo));
Meteor.call('filtermals',dateFrom,dateTo,timeFrom,timeTo,函数(错误,结果){
如果(错误)
返回投掷者(错误原因);
温度套餐(结果);
});
}
});
使用会话变量有一种更简单的模式,但您也可以用反应变量代替:
Template.mealsList.helpers({
meals: function() {
var query = Session.get('myQuery');
return Meals.find({},query,{ sort: { eatenAt: -1 }});
}
});
这意味着模板帮助器是被动的,只要myQuery
会话变量发生更改,模板帮助器就会自动更新结果!不要大惊小怪
您可以在事件处理程序中更新查询:
Template.mealsList.events({
'click .run-filter': function(e) {
var query = ...; // This needs to be a MongoDB query object pertinent to the collection being queried
Session.set('myQuery',query)
}
});
只有单击才能设置日期范围,但查询将在模板加载时运行,因此您还需要:
Template.mealsList.onCreated(function(){
var query = Session.get('myQuery');
if ( !query ){
query = ... // initialize your query here
Session.set('myQuery',query); // then stuff it into the session
}
});
我不知道你为什么在那里有Meteor.call()
。您还必须从服务器获取文档吗
在这种情况下,您应该使用一个订阅来传递查询参数。例如,您可以通过以下方式扩展onCreated函数:
Template.mealsList.onCreated(function(){
var query = Session.get('myQuery');
if ( !query ){
query = ... // initialize your query here
Session.set('myQuery',query); // then stuff it into the session
}
var ti = this; // the template instance. We need this because we're about to nest
ti.autorun(function(){
ti.subscribe('Meals',query);
});
});
Template.mealsList.onCreated(function(){
var query = Session.get('myQuery');
if ( !query ){
query = ... // initialize your query here
Session.set('myQuery',query); // then stuff it into the session
}
var ti = this; // the template instance. We need this because we're about to nest
ti.autorun(function(){
ti.subscribe('Meals',query);
});
});