我将其发布到Google Meteor-Talk小组,但我认为这是一个晦涩的问题,它需要信号增强。

我正在尝试创建一个插件,让您可以将XML样式的元素添加到HTML文档中,就像HTML5一样,可以与XML3D一起使用。我认为使用Blaze模板和XML3D反应性地渲染3D内容真的很棒。

我需要使用document.createElementNS方法将元素添加到DOM中,以便将其添加到比SVG替代的命名空间下,以便尝试使用替代规范。

不幸的是,根据以下代码,Meteor仅支持SVG名称空间的该方法:
https://github.com/meteor/meteor/blob/a81fbf483efa4f40ea2d382f0c7275d408536e96/packages/blaze/materializer.js#L41

我考虑了两种不同的方法来执行此操作。我可以创建一个模板块助手,如下所示:

在空格键中:

{{#xml ns="http://www.xml3d.org/2009/xml3d"}}
  <xml3d>...</xml3d>


在翡翠:

+xml(ns='http://www.xml3d.org/2009/xml3d')
  xml3d ...


那部分很简单,但是我如何使用正确的名称空间以反应方式将呈现的内容传递给Blaze以及最终传递给DOM?

或者,我可以尝试通过某种方式扩展Blaze以支持替代名称空间,也许是通过使用一个包。我也不知道该怎么做,因为我不认为软件包可以扩展Blaze。我确实看到了BlazeTools,也许可以帮上忙吗?关于执行该操作的文档很少,而实际上执行的代码也不是很清楚。

或者可能是这两种方法的某种组合,例如,使用块帮助器发信号通知Blaze XML名称空间以在其下呈现块帮助器的内容。

有什么想法吗?

最佳答案

所以,我并不完全肯定这是流星的问题。

运行XML3D初始化代码后,Meteor似乎可以足够有效地添加元素。正确初始化XML3D之后,我就可以做很多事情,包括使用响应式模板。

我不得不在我的路由控制器中一起破解这部分代码,但是...

Template.{insert-your-template-name-here}.rendered = ->
  window.initXML3DElement $('xml3d')[0]
  setTimeout ->
    $('canvas').attr
      width: 600
      height: 600
    $('canvas').parent().css
      display: 'block'
  , 1000


我希望这对将来在此问题上绊脚石的人有所帮助。欢迎提供其他意见和支持,但是我对目前的情况感到非常满意。

我将尽快编写一个可帮助解决此问题的软件包,并将其上传到Atmosphere。

10-06 12:59