Já levantei a questão aqui e aqui . Até agora existe uma solução alternativa , mas ainda não entendo a causa raiz.
Ao executar o seguinte aplicativo usando a versão mais recente do CRAN library(shiny)
e library(jsTreeR)
(2.5.0) após redimensionar a janela do navegador, esse erro pode ser visto no console do navegador:
Aplicativo de exemplo:
library(jsTreeR)
library(shiny)
nodes <- list(
list(
text = "Fruits",
type = "fruit",
children = list(
list(
text = "Apple",
type = "fruit",
data = list(
quantity = 20
)
),
list(
text = "Banana",
type = "fruit",
data = list(
quantity = 31
)
),
list(
text = "Grapes",
type = "fruit",
data = list(
quantity = 34
)
)
),
state = list(
opened = TRUE
)
)
)
grid <- list(
columns = list(
list(
width = 200,
header = "Product"
),
list(
width = 150,
value = "quantity",
header = "Quantity"
)
)
)
ui <- fluidPage(
titlePanel("jsTree grid"),
jstreeOutput("jstree")
)
server <- function(input, output, session){
output$jstree <- renderJstree(jstree(nodes, search = TRUE, grid = grid))
}
shinyApp(ui, server)
Este é apenas o caso quando jstree
é fornecido com o grid
parâmetro.
@StéphaneLaurent identificou que a classe shiny-bound-output
está atribuída ao jstree-grid-wrapper
div que causa o problema e que removê-la evita o erro.
Gostaria de entender por que essa classe foi adicionada e se existe uma maneira adequada de implementar o grid
parâmetro sem encontrar esse problema.
Acho que a resposta está no arquivo jstreegrid.js , no listener do
ready.jstree
evento, código começando na linha 493:Neste código,
cls = this.element.attr("class")
é a sequência de caracteres composta por todas as classes atribuídas à árvore, separadas por um espaço em branco. Em seguidaq = cls.split(/\s+/).map(...
, é o array de todas essas classes, exceto ajstree
classe e as classes iniciadas comjstree-
, e essas classes são então adicionadas à grade (ajstree-grid-wrapper
div). E então vejo duas possibilidades:nesta fase, a árvore já possui a
shiny-bound-output
classe, que então é adicionada à grade;ou a árvore ainda não tem a
shiny-bound-output
classe, mas tem a classejstreer
, e então o htmlwidgets adiciona a classeshiny-bound-output
a todos os elementos que possuem ajstreer
classe.Editar
Acabei de verificar e a árvore tem as duas classes
shiny-bound-output
ejstreer
neste estágio.Uma possível solução é modificar o jstreegrid.js para que ele não copie essas classes para a grade. Na verdade não vejo outra solução.