在collection.update()上未触发流星反应计算

时间:2014-08-15 10:22:46

标签: javascript canvas meteor fabricjs

我已经定义了一个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调用之前,这给出了结果: enter image description here

正如您所看到的,positionLeft和positionTop的值已经发生了变化,因此应该调用Autorun块。

1 个答案:

答案 0 :(得分:1)

事实证明更新在触发自动运行之后(应该这样做)。

我想在自动运行中执行的代码由于if语句被包含在因为无关的原因而被评估为false而没有执行。

将来,最好在自动运行块的开头加console.log("auto run executed");。然后,您可以立即知道在任何条件下是否触发了自动运行。