2014-03-25 56 views
2

下面最小的閃亮應用程序生成一個帶彈出窗口的html表格。它用閃亮的0.8正常工作,但它不適用於閃亮的0.9:只顯示彈出窗口的標題,而不是內容。此問題在shiny-discuss上尚未解決。也許這是由於引導或jQuery的,這已經在閃亮的0.9彈出窗口不能使用閃亮的0.9

tabl <- function(){ 
    title <- "hello" 
    content <- "Goodbye" 
    out <- sprintf('<table style="width:300px"> 
    <tr> 
    <td><a href="javascript: void(0)" data-toggle="popover" data-content="%s" data-html="true" data-animation="true" data-placement="bottom" data-trigger="hover" title="%s">Jill</a></td> 
    <td>Smith</td> 
    <td>50</td> 
    </tr> 
    <tr> 
    <td>Eve</td> 
    <td>Jackson</td> 
    <td>94</td> 
    </tr> 
</table> 
', title, content) 
    out <- tagList(
    singleton(
     tags$head(
     tags$script("$(function() { $(\"[data-toggle='popover']\").popover(); })") 
    ) 
    ), 
    HTML(out) 
) 
    return(out) 
} 

runApp(
    list(
    ui=pageWithSidebar(
     headerPanel(""), 
     sidebarPanel(
    ), 
     mainPanel(
     uiOutput("htmltable") 
    ) 
    ), 
    server=function(input,output,session){ 
     output$htmltable <- renderUI({ tabl() }) 
    }) 
) 

回答

6

它是一個時間問題了更新: 你的函數改爲

tags$script("$(setTimeout(function() { $(\"[data-toggle='popover']\").popover(); }),3000)") 

例如,它應該工作。原始版本中的元素不在DOM中。以上是解決該問題的便宜(不一定好)的方法。

有一個變化,以閃亮的0.9

tags$head()singleton()
renderUI()uiOutput()使用時正常運行。以前,「將內容提升到 標題」和「僅一次渲染項目」是 僅在頁面初始加載時才起作用,而不是在動態 呈現中起作用。

大概以前的腳本並沒有被擡起頭來,執行的順序是不同的。

+0

謝謝jdharrison。我的上面的例子對你的提議可以正常工作,但還有一個問題:如果彈出窗口的內容是被動的,那麼每當它發生變化時它就不會再出現。 –

+0

@StéphaneLaurent你可能需要在這種情況下設置一個觀察者。觀察執行JavaScript使用自定義消息或類似的東西。您可以控制觀察者何時使用優先級執行。 – jdharrison

+0

謝謝,我會盡力的。否則,你是否認爲在shinyBS包中有適當的功能? (幾天前我已經發現了這個包) –