2015-08-16 81 views
1

我想在FileMaker解決方案中實現D3圖形和圖表。我被困在正確加載JSON文件以便在webviewer中顯示的D3代碼中使用。在WebViewer中加載FileMaker for D3中的JSON文件

我將全部JS庫加載到全局變量($$ LIB.D3.JS,$$ LIB.JQUERY.JS等)中。然後我將HTML代碼放在佈局上(提供一個對象名稱,即html)。 Web查看器獲取HTML代碼(從佈局上的文本框)和JS代碼(從全局變量)來呈現頁面。這一切工作正常。 (我在這裏使用這種方法:https://www.youtube.com/watch?v=lMo7fILZTQs

但是,D3代碼我使用getJSON()函數來獲取JSON,解析數據並創建可視化。我無法弄清楚如何從FileMaker中將JSON文件作爲文件獲取。我可以將JSON文件的內容放入一個FileMaker變量中,並將其提供給HTML,但是我無法使用getJSON()。我將不得不重做D3代碼以從JS變量中獲取數據並解析變量中的數據。

有沒有辦法讓我加載JSON文件,以便FileMaker可以使用它來在WebViewer中正確渲染可視化文件。

回答

1

您有兩種選擇。

1.如您所述計算JSON到HTML中。你的權利你將不得不改變你如何使用d3加載JSON。但它並不艱難。當你從磁盤加載JSON時,使用類似d3.json('/data.json', callback)的東西,你只需加載json,然後將它提供給回調函數。如果JSON是在一個類似var embeddedJSON的HTML頁面,您只需直接調用回調與embeddedJSON

callback (embeddedJSON)

您的代碼可能看起來更像這一點。

d3.json('/data.json', function(data){ 
    // bunch of d3 code 
}) 

這種情況下的回調是匿名函數。你可以像這樣改變它。

var render = function(data){ 
    // bunch of d3 code 
}) 
// then call render with your json variable that you embedded into the html 
render (embeddedJSON) 

這將工作得很好。

2.將html頁面導出到臨時目錄,並將帶有數據的json文件導出到它旁邊。然後使用file:// url顯示html。在這種情況下,您可以使用d3.json(/data.json, callback),這也可以很好地工作。

這些方法都有其優點和缺點,但都起作用。

+0

導出到臨時目錄是否適用於FileMaker Go和WebDirect? – mattbowlby

+0

任何一種方法都適用於Filemaker Go。導出到臨時目錄不適用於webdirect。這是我說他們都有優點和缺點的原因之一。 – toddgeist

+0

謝謝。兩個選項都很好用。 – mattbowlby

0

在大多數情況下,將JavaScript或其他資產集成到Web查看器中的最佳做法是將資源推送到臨時目錄(使用FileMaker中的GetTemporaryPath()獲取此資源),然後可以將資產直接導出到指定文件。完成此操作後,您可以使用file://協議在代碼中引用這些文件。

與舊方法相比,這具有許多優點,例如將所有內容加載到全局變量中。其中最大的一個是,只要您將JSON加載到獨立文件中,並且不會使用FileMaker數據「污染」任何其他文件,則可以完全在您選擇的代碼環境中工作,然後只需將Web JavaScript庫, html,CSS和其他資源直接放入您的FileMaker解決方案中。

+0

我不會調用導出到臨時目錄的最佳做法。這是一個好方法。但是,將整個Web應用程序作爲一個單獨的html字符串進行計算並將其顯示爲數據url – toddgeist

+0

Todd,可惜我們的答案在以太網中交叉;我不打算反駁你的帖子。然而,我會堅持我的槍支稱這是最佳做法 - 而不是所有情況下的最佳做法。我同意有些情況下,您所描述的替代方法可以取得良好的效果,但也會指出,在大多數情況下,這會導致一系列不幸的做法,導致開發人員陷入不幸的角落。在一天結束的時候,我懷疑我們同意這個草坪的98%:-)。 –

+0

布賴恩,它可能是2%,也許更多:-)我不知道,因爲它不清楚你提到那些「不幸的做法」是什麼。 但我可以告訴你,我發佈了兩款基於Web查看器的JavaScript應用產品。無論是哪一個導出到臨時目錄。它們都是使用現代Javascript工具開發的現代Web應用程序。最終的grunt編譯工具將它們打包爲一個巨大的單個字符串HTML文本字符串,它可以在Web查看器中即時加載,而無需任何導出腳本步驟。 我不覺得這些都被塗在角落裏。 – toddgeist