我将其发布到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。