2014-11-06 52 views
1

我把這個發佈到Meteor-Talk Google Group,但我認爲這是一個晦澀難懂的問題,它需要一個信號提升。XML3D,document.createElementNS和Meteor

我試圖創建一個插件,讓您將HTML樣式的元素添加到HTML文檔中,儘可能使用HTML5,以便與XML3D一起使用。我認爲使用Blaze模板和XML3D呈現3D內容是非常棒的。

我需要使用document.createElementNS方法向DOM中添加元素,以便將它們添加到SVG以外的替代名稱空間下,以便試驗替代規範。

不幸的是,流星僅支持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命名空間以呈現塊幫助器的內容。

想法?

回答

0

因此,我並不完全肯定,畢竟這是Meteor的問題。

一旦我運行XML3D初始化代碼,流星似乎就足夠有效地添加我的元素。一旦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。