【发布时间】:2015-11-15 10:42:41
【问题描述】:
我将如何接收在闪亮的server.R 中的.js 文件中创建的数据?
我正在使用 Leaflat 库,我需要扩展当前地图视图的 LatLngBounds。我需要server.R 中的这个变量进行进一步处理。
所以我有
mycode.js
//get bounds of extend of view
$(document).ready(function() {
var myBounds = map.getBounds();
Shiny.onInputChange("bounds", myBounds);
});
我把它包含在ui.R 中
tags$body(tags$script(src="mycode.js"))
这就是我的Server.R 的样子:
myBoundsR <- reactive(
as.numeric(input$bounds)
print(input$bounds)
)
但是,我将如何接收来自 mycode.js 的 server.R 文件中的数据?
感觉Shiny.addCustomMessageHandler只能在.js(或.R)中接收数据,而session$sendCustomMessage只能在.R文件中使用?我会用什么来将.js 文件中的内容发送到server.R 文件?!
或者我可以像在server.R 文件中创建它一样简单地使用变量bound?!
【问题讨论】:
-
你可以尝试在你的 javscript 中使用
Shiny.onInputChange("var", data);,在你的server.R中使用input$var来获取变量。 -
@NicE 我不必绕道将变量存储在未显示的 div 容器中然后获取它?!喜欢这里的建议吗? stackoverflow.com/questions/23715614/… 因为当我这样写时
myBounds <- observe(as.numeric(input$bound))它不起作用。我试图将它包装到reactive函数中,但也没有成功。 -
你的意思是它不起作用。如果您不发布更多代码/我们可以运行的示例,很难帮助您。
-
@NicE 这就是我得到的错误
Error in print(myBounds) : object 'myBounds' not found。我认为observe函数没有收到来自js file的变量?我在那里更新了我的代码。 -
如果你想将它存储在某个东西中,需要是响应式的,你还需要在响应式表达式中使用
print(input$bound)。不清楚Number在你的 javascript 中是什么,也许先尝试使用Shiny.onInputChange("bound", "something");看看“某事”是否打印在你的 R 控制台中。如果是这样,那么问题可能出在您的 javascript 中。
标签: javascript r shiny shiny-server