【发布时间】:2017-08-28 21:45:40
【问题描述】:
我已将传单TextPath 插件添加到类似于this example 的闪亮应用程序中。这很好用:
output$fullscreen_map <- renderLeaflet({
points <- points_reactive()
points %>%
leaflet() %>%
addTiles() %>%
fitBounds(~min(lon), ~min(lat), ~max(lon), ~max(lat)) %>%
registerPlugin(textPathPlugin) %>%
onRender("function(el, x, data) {
data = HTMLWidgets.dataframeToD3(data);
data = data.map(function(val) { return [val.lat, val.lon]; });
var layer = L.polyline(data);
layer.on('mouseover', function () {
this.setText(' ► ', {repeat: true, attributes: {fill: 'blue'}});
});
layer.on('mouseout', function () {
this.setText(null);
});
layer.addTo(this);
}", data = points)
})
根据docs,我现在想使用leafletProxy(),以便在响应式数据源更改时不会重绘整个地图。唉,使用下面的sn-p代码
leafletProxy("fullscreen_map", data = points) %>%
onRender("function(el, x, data) {
data = HTMLWidgets.dataframeToD3(data);
data = data.map(function(val) { return [val.lat, val.lon]; });
var layer = L.polyline(data);
layer.on('mouseover', function () {
this.setText(' ► ', {repeat: true, attributes: {fill: 'blue'}});
});
layer.on('mouseout', function () {
this.setText(null);
});
layer.addTo(this);
}", data = points)
没有按预期工作。我认为这是因为 onRender 仅在发生新渲染时才被调用,而 leafletProxy 的全部意义在于不重新渲染?如果这是正确的,有没有办法使用其他方法来做到这一点?
【问题讨论】:
-
这是一个有趣的问题... Shiny 具有非常强大的事件处理能力,所以我认为诀窍是找出在脚本中绑定的正确位置。在没有 WME 的情况下解决这个问题有点棘手。你介意发一个吗?
-
在我看来它应该可以工作。如果对 javascript 进行细微调整修复它,我不会感到惊讶,但需要进行 MWE 并且现在没有时间。
-
您是否尝试过重新启动闪亮的服务器并再次运行它?在过去的几天里,我遇到了一些莫名其妙的可怕问题,但通过重新启动解决了。值得一试。
-
@yosukesabai 你能发布一个最小的可重现示例吗?
-
是的,今晚我会做的