Я делаю тест для интеграции Tableau JavaScript API в одностраничное блестящее приложение. Я успешно выполнил Tableau Viz, но функции фильтра не будут работать.
Вот мой код:
library(shiny)
library(shinyjs)
shinyApp(
ui = fluidPage(
useShinyjs(),
tags$head(tags$script(src="https://public.tableau.com/javascripts/api/tableau-2.min.js")),
extendShinyjs(text='shinyjs.initializeViz = function(){
var placeholderDiv = document.getElementById("tableauViz");
var url = "http://public.tableau.com/views/WorldIndicators/GDPpercapita";
var options = {
hideTabs: true,
hideToolbar: true,
onFirstInteractive: function () {
workbook = viz.getWorkbook();
activeSheet = workbook.getActiveSheet();
}
};
viz = new tableau.Viz(placeholderDiv, url, options);
}
shinyjs.filterSingleValue= function(filtername, value){
activeSheet.applyFilterAsync(
filtername,
value,
tableau.FilterUpdateType.REPLACE);
} '),
titlePanel("Tableau JavaScript API in Shiny App"),
selectInput('region', 'Region: ',
c('The Americas', 'Europe', 'Middle East')),
tags$div(id = 'tableauViz')
),
server = function(input, output, session){
observeEvent(input$region, {
js$filterSingleValue('Region', input$region)
js$initializeViz()
})
}
)
Любые идеи почему?
Наконец, найдите выход... По какой-то причине при преобразовании функций JavaScript в shinyjs.function он может распознавать только один параметр, то есть в этом случае переписать функцию фильтра, удалив первый параметр:
shinyjs.filterSingleValue= function(value) {
activeSheet.applyFilterAsync(
'Region',
value,
tableau.FilterUpdateType.REPLACE);
}
Это должно устранить проблемы. Спасибо всем, кто потратил ваше драгоценное время на это...