我是meteor的新手,我尝试使用tmeasday:publish-counts包来发布一些计数。当我刚读取计数时,反应性开箱即用,但当我在Template.helper函数中使用计数时,当计数发生变化时,函数不会更新。
这就是我所拥有的:
在服务器上:
Meteor.publish('counters', function() {
Counts.publish(this, 'searches-thisWeek', UserActions.find({
$and: [
{ action: SEARCHES_REGEX },
{ date : { $gte : moment().startOf('week').toDate()} },
{ date : { $lt : moment().toDate()} }
]
}));
Counts.publish(this, 'searches-lastWeek', UserActions.find({
$and: [
{ action: SEARCHES_REGEX },
{ date : { $gte : moment().subtract(1, 'week').startOf('week').toDate()} },
{ date : { $lt : moment().subtract(1, 'week').endOf('week').toDate()} }
]
}));
});
在客户端:
Template.dashboard.helpers({
nbSearchesThisWeek : function() {
var variation = Counts.get('searches-thisWeek') - Counts.get('searches-lastWeek');
return {
currentValue : Counts.get('searches-thisWeek'),
orientation : {
sign: (variation > 0) ? '+' : '',
class: (variation > 0) ? 'up' : 'down'
},
variation : variation
};
}
});
在我的模板中,我有一个:
<td>{{getPublishedCount 'searches'}}</td>
<td>{{#with nbSearchesThisWeek}}{{>variations }}{{/with}}</td>
它使用此子模板:
<template name="variations">
<div class="variation col-lg-12">
<span class="variationValue {{orientation.class}} col-lg-6">{{orientation.sign}}{{variation}}</span>
<span class="currentValue col-lg-6">{{currentValue}}</span>
</div>
</template>
{{getPublishedCount'搜索'}}更新正常。它只是得到我的“搜索”计数器,并在计数器发生变化时随时更新。
但是,子模板中的计数器在启动时执行正常,但在任何相关计数器发生更改时永远不会更新。
所以我的问题是,我如何以及在哪里让我的nbSearchesThisWeek助手对依赖计数器值的变化作出反应?当我阅读有关Deps,Tracking和ReactiveVars的文档时,我感到非常困惑......我真的不明白应该用这些东西来使我的用例工作......
感谢您的帮助。
菲利普
答案 0 :(得分:1)
我创建了一个代码尽可能与您的代码相同的MeteorPad,并且它都是被动的,不需要对代码进行任何更改。
请注意,我没有尝试重新创建您的UserActions集合,而是创建了两个独立的集合,UserActions和Players(名称没有意义)来创建两个类似于您的计数器。我想,一旦你看到代码,你就会同意为了检查你的代码,它会做。
转到此页面:http://app-cmrd2ous.meteorpad.com/打开Chrome或Firefox控制台并插入以下两条记录并观看计数器:
UserActions.insert({name: 'bloggs', date: new Date()});
Players.insert({name: 'bloggs again', date: new Date()});
柜台都是被动的。
meteorpad在这里:http://meteorpad.com/pad/n4GwwtPesEZ9rTSuq/Dashboard
我可以建议的是,你看看我把代码放在哪里(无论是在客户端还是服务器上) - 也许这与它有关。
但也许更可能是你运行错误的测试。换句话说,也许你的日期错了 - 你以为你是在插入一个上周日期的记录,而实际上它是两周前或类似的。