XML3D, document.createElementNS, and Meteor

XML3D, document.createElementNS, and Meteor

本文关键字:Meteor and document XML3D createElementNS      更新时间:2023-09-26

我把这个发布到了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名称空间的信号,以在下面呈现块帮助器的内容。

想法?

所以,我并不完全肯定这毕竟是Meteor的问题。

一旦我运行了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。