XML3D,document.createElementNS和Meteor

时间:2014-11-06 04:55:15

标签: javascript node.js meteor 3d xml3d

我将此发布到Meteor-Talk Google Group,但我认为这是一个非常模糊的问题,需要提升信号。

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

我需要使用document.createElementNS方法向DOM添加元素,以便在SVG的替代命名空间下添加它们,以便尝试替代规范。

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

我考虑过两种不同的做法。我可以创建一个模板块帮助器,如下所示:

在Spacebars中:

{{#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命名空间发出信号,以呈现块助手的内容。

思想?

1 个答案:

答案 0 :(得分:0)

所以,我并不完全肯定这毕竟是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。