我已经定义了一个Meteor Collection,它存储了允许共享绘图画布的路径:
CanvasPaths = new Meteor.Collection("canvasPaths");
我在自动运行块中重绘画布:
Deps.autorun(function() {
var paths = CanvasPaths.find().fetch();
//some stuff happens
}
使用collection.insert()向集合添加路径会触发此自动运行块再次运行,因为计算失效:
CanvasPaths.insert({
path: collectionPath
});
但是,当我更新集合中已有的路径时,计算不会失效,并且自动运行功能不会重新运行:
CanvasPaths.update(id, {
$set: {
path: getPathObjectForCollection(this)
}
});
当然,更新集合会使使用该集合的反应块中的任何计算无效吗? 如何在所有客户端上重新运行自动运行块中的功能?
修改
回应李俊乐的评论: 我添加了
console.log(CanvasPaths.findOne(id).path); //exisiting record
console.log(getPathObjectForCollection(this)); //what we are updating to
在CanvasPaths.update调用之前,这给出了结果:
正如您所看到的,positionLeft和positionTop的值已经发生了变化,因此应该调用Autorun块。
答案 0 :(得分:1)
事实证明更新在触发自动运行之后(应该这样做)。
我想在自动运行中执行的代码由于if语句被包含在因为无关的原因而被评估为false而没有执行。
将来,最好在自动运行块的开头加console.log("auto run executed");
。然后,您可以立即知道在任何条件下是否触发了自动运行。