将ImpactStory JavaScript小部件呈现给R Shiny应用程序中的表格单元格

时间:2013-10-16 07:25:53

标签: javascript r shiny

[问题是昨天也发布到https://groups.google.com/d/msg/shiny-discuss/1UmzvZJwM54/gdMmX7QQ-eIJ,到目前为止没有答案]

我一直在开发一个Shiny应用程序,它既可以作为表格,也可以作为rCharts(NVD3)图表显示一些期刊文章http://spark.rstudio.com/ttso/alt/的原始altmetric数据

我的代码包含示例数据https://gist.github.com/tts/6990101

到目前为止一切都那么好,但是现在我遇到了困难,试图在表格中包含http://impactstory.org/api-docs中解释的JavaScript小部件。这样的小部件工作得很好,就像在这个HTML示例中{{3} - 但是在我的Shiny表中,它们应该出现的最后一个(IS)列是空的。

当我不确定地离开桌子时,我可以看到HTML代码在那里 - 但是当消毒时,它会消失。 server.R中的renderTable代码:http://users.tkk.fi/sonkkila/alt/arts.html

从HTML源代码我也可以看到ImpactStory脚本位于页面顶部。

欢迎所有指针!

免责声明:虽然我已经和R和Shiny玩了一段时间,但我认为自己是一个JavaScript / CSS新手,所以我可能会遗漏一些明显的东西。

编辑:只是为了澄清:当然,已清理的HTML代码在此时消失了,因为没有文本元素值。我想知道a)不同的JS脚本之间是否存在冲突,可能它们需要按不同的顺序排列(不得不询问ImpactStory)或b)xtable()如何生成输出或c)存在一些问题Shiny不知道如何与impactstory.js脚本进行通信或d)Shiny根本看不到脚本。我应该构建自定义输出组件吗?

EDIT2:AFAIK的问题在于,被动输出的表没有看到JavaScript。测试:当我手动将非动态HTML代码添加到ui.R时,其中包含ImpactStory JS需要知道的有关文章的所有属性,小部件呈现为正常。另外,如果我在server.R中添加输出的数据框中的脚本元素,则呈现小部件,但是 - 永远不会停止这样做,导致循环:)我想我需要的是类似于问https://gist.github.com/tts/6990101#file-server-r-L69-L85

1 个答案:

答案 0 :(得分:0)

好吧,我找到了一个不太漂亮的解决方案,但暂时会这样做。

renderTable使用xtable渲染HTML表格,您可以在此处定义自己的清理功能,请参阅http://cran.r-project.org/web/packages/xtable/vignettes/xtableGallery.pdf(第7页)

在这里,我只是将列标题'Widget'替换为定义脚本的字符串:

output$table <- renderTable({  
   ...
  }, include.rownames = FALSE, sanitize.text.function = function(s) sub("Widget", "<script type=\"text/javascript\" src=\"http://impactstory.org/embed/v1/impactstory.js\"></script>", s))

由于我还不了解的原因,最初有一组双小部件。

感谢您的耐心等待。