我试图跟踪Meteor中某个无效值的增量。如果当前值增加了1或更多,我想要发生一些事情。我确实有两个问题:
这是我现在的代码,使用Mongo.Collection cars
(来自API):
api = DDP.connect('url');
const currentCars = new Meteor.Collection('cars', api);
const newCars = cars.find().count()
if (Meteor.isClient) {
Template.currentCars.helpers({
carsInCity: function() {
return currentCars.find(
{
location: "city"
}).count();
},
})
}
因此,目前该市的汽车数量还很多。每当还有一辆车时,我希望在代码中发生一些事情。但是我怎么能这样做呢?也许通过跟踪数据库何时更新?
答案 0 :(得分:3)
一个相当直接的解决方案是存储current amount of data in that collection,然后运行reactive computation以查看是否有任何更改。
这样的事情:
let currentCarsCount = cars.find().count()
Tracker.autorun(function checkForAddedCars() {
// cars.find() is our reactive source
const newCarsCount = cars.find().count()
if(newCarsCount > currentCarsCount) {
currentCarsCount = newCarsCount
// There's new cars, handle them now
// ...
}
})
您可能还想使用template-level autorun
,这样您就无需管理停止checkForAddedCars
。您还可以将currentCarsCount
作为状态存储在template instance上,而不是作为一个悬而未决的孤独者。
例如:
Template.currentCars.onCreated(function() {
const templateInstance = this;
// equivalent:
const templateInstance = Template.instance();
templateInstance.currentCarsCount = cars.find().count();
templateInstance.autorun(function checkForAddedCars() {
// cars.find() is our reactive source
const newCarsCount = cars.find().count();
if(newCarsCount > templateInstance.currentCarsCount) {
templateInstance.currentCarsCount = newCarsCount;
// There's new cars, handle them now
// ...
}
});
});
它还允许您从模板代码中的其他位置访问currentCarsCount
。