2015-08-16 82 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