我试图了解如何在Meteor中重新发布。我已经发布了#34; allCustomers"最初在页面加载时加载的数据,来自当月的客户:
Meteor.publish("allCustomers", function () {
var pDate = moment().utc().toDate();
var dateFilter = GetWholeMonthFilterFromDate(pDate);
return Customers.find(dateFilter);
});
到目前为止一切顺利。我也有这种服务器方法,当用户选择不同的月份时,客户可以获得当前的
。Meteor.methods({
allCustomers:function(pDate){
function GetWholeMonthFilterFromDate(pDate){
var firstDayOfMonth = new Date(pDate.getFullYear(), pDate.getMonth(), 1);
var lastDayOfMonth = new Date(pDate.getFullYear(), pDate.getMonth() + 1, 0);
var dateFilter =
{
"joined": {"$gte": firstDayOfMonth, "$lte": lastDayOfMonth}
};
return dateFilter;
}
var dateFilter = GetWholeMonthFilterFromDate(pDate);
return Customers.find(dateFilter).fetch();
},
我用这个" allCustomers"像这样的服务器方法:
Meteor.call("allCustomers", selectedDate, function(error, result){
if(error)
{
console.log('ERROR :', error);
return;
}
else
console.log(result);
});
我的问题是,当用户选择不同的日期时,如何使用Meteor.call中的结果集(" allCustomers")更新初始发布的" allCustomer"数据?这意味着,即使我确实在控制台中看到了新客户(作为回调执行),我的页面仍然使用初始发布中的旧数据。如何使用Meteor.call()的结果重新更新已发布的数据?
提前致谢
答案 0 :(得分:2)
尝试重新订阅allCustomers
,这几乎无需改进:
Meteor.publish("allCustomers", function (pDate) {
var dateFilter = GetWholeMonthFilterFromDate(pDate);
return Customers.find(dateFilter);
});
通过添加参数allCustomers
修改了pDate
发布功能,该参数比在内部创建pDate
更灵活。
在这种方法中,您使用参数pDate
再次停止订阅和订阅。
// UPDATED after @saimeunt comment
if (Meteor.isClient) {
Meteor.startup(function(){
Tracker.autorun(function(){
Meteor.subscribe('allCustomers',Session.get("selectedDate"));
})
// initial selection
Session.set("selectedDate",moment().utc().toDate());
})
}
请务必在Session.set("selectedDate", DATE_PARAM)
菜单模板中更改日期:
Template.tpl_name.events({
'click .month':function(e, tpl){
var DATE_PARAM = ... ;
Session.set("selectedDate", DATE_PARAM)
}
})
每次用户点击.month
按钮Session.get("selectedDate")
都会被更改,这将导致重新订阅。