Meteor - 使用订阅数据自动更新 Canvas ?

标签 meteor

我可能遗漏了一些东西,但 Meteor 的“魔法”似乎围绕着将数据绑定(bind)到 DOM 元素,并通过 Handlebars 更新文本和 HTML 片段:http://docs.meteor.com/#reactivity

这很棒,但是,当尝试编写一个在 元素中显示实时数据的 meteor 应用程序时,我无法弄清楚当实时数据更改时更新我的​​ Canvas 的“ meteor 方式”,因为 Canvas 是通过 JS 填充的代码如:

var g = canvas.getContext('2d')
g.fillRect(x, y, w, h)

而不是 HTML 模板中的数据支持文本。

我正在尝试使用 Meteor.Collection 中的数据在 Canvas 上绘图。

我唯一的想法是将 Canvas 绘图 JS 代码嵌入 HTML 模板中由 Handlebars 变量填充的脚本标记中,但这似乎是错误的,因为 meteor 的事件和数据绑定(bind)代码已经是客户端 JS。

是否有某种方法可以监听实时数据更改,从而触发通过 JS 而不是 HTML 元素/文本在 Canvas 上绘图?

如果我能以某种方式澄清这个问题,请告诉我

更新:
下面汤姆的回答让我注意到 Meteor.deps,它看起来允许在响应式(Reactive)上下文中执行任意代码:
http://docs.meteor.com/#on_invalidate

如果可行,我将尝试并在此处更新。

最佳答案

也许您的问题的答案是使用 Collection.observe ( http://docs.meteor.com/#observe ) 并在各种回调中触发相关的重绘代码。

例如,类似:

Rectangles.observe({
  added: function(rect) {
    var g = canvas.getContext('2d');
    g.fillRect(rect.x, rect.y, rect.w, rect.h);
  },
  // etc
})

关于Meteor - 使用订阅数据自动更新 Canvas ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10794409/

相关文章:

javascript - Meteor:在响应 HTTP post 请求之前返回 Promise

angularjs - Meteor-Angular 教程 : bad formatting in HTML template, 用于复制/粘贴代码

android - 如何升级 meteor 应用程序

Meteor 新样板应用程序通过 "meteor create"如何制作?

javascript - 如何使用 Meteor 在 HTTP.call 中将动态构建的字符串作为 http header 传递?

javascript - 由于内容不同,Meteor 重复模板

postgresql - 与 postgreSQL 而不是 MongoDB 的 meteor react

javascript - meteor 列表项目数量

mongodb - 使用 meteor 部署时如何保留 mongodb?

javascript - 我可以在不使用整个 Meteor 或 Blaze 框架的情况下使用 Minimongo 吗?