1

我将此发布到 Meteor-Talk Google Group,但我认为这是一个如此晦涩难懂的问题,需要增强信号。

我正在尝试创建一个插件,让您可以将 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 名称空间的信号,以呈现块助手的内容。

想法?

4

1 回答 1

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。

于 2014-11-07T10:45:08.627 回答