Обновить HTML-интерфейс с помощью JSON - PullRequest
1 голос
/ 21 марта 2019

У меня есть пользовательский интерфейс HTML для моего приложения Shiny.Пользовательский интерфейс опирается на некоторые данные JSON.Я написал сценарий R для создания файла JSON, который, кажется, работает отлично.Я сделал test.json, чтобы помочь выложить остальную часть пользовательского интерфейса.Когда пользователь нажимает кнопку в пользовательском интерфейсе, я хочу запустить скрипт, чтобы создать новый файл JSON, из которого будут созданы данные, которые будут отображаться в приложении.Скрипт для создания JSON и HTML / JavaScript / CSS для пользовательского интерфейса прекрасно работает, когда нет в приложении Shiny.Я убедился, что кнопка регистрирует щелчок в приложении Shiny, но он не перезапускает скрипт и не обновляет отображаемый пользовательский интерфейс.

Это файл app.R, который у меня есть:

ui = htmlTemplate(
  "www/index.html",
  styleInfo = includeCSS("www/style.css"),
  button = actionButton("btn", "Click me!"),
  scriptInfo = includeScript("www/index.js")
)

server = function(input, output, session){
  observeEvent(input$btn, {
    message("Clicked\n")
    function_to_change_json_here()
  })
}

Вот файл index.html, используемый при вызове приложения к htmlTemplate().Он находится в подкаталоге www/ папки, содержащей app.R.

<!DOCTYPE html>
<head>
    <meta charset="utf-8">
    <title>Page Title</title>
    {{styleInfo}}
</head>
<body>
    <header class="top-banner">
        <div class="top-banner-wrap">
            <p class="intro" id="intro"></p>
            <h1 id="headline">Some Content</h1>
            <p class="year"> 2019 </p>
            <p id="foo">bar</p>
            {{button}}
        </div>
    </header>
    <section>
        <div class="container">
            <ul class="matchup">
                        <li class="team team-top">
                            <span class="seed" id="r1-seed-1-seed"></span>
                            <img class="logo" id="r1-seed-1-logo">
                            <span id="r1-seed-1-name"></span>
                            <span class="score"></span>
                        </li>
                        <li class="team team-bottom">
                            <span class="seed" id="r1-seed-16-seed"></span>
                            <img class="logo" id="r1-seed-16-logo">
                            <span id="r1-seed-16-name"></span>
                            <span class="score"></span>
                        </li>
                    </ul>
        </div>
    </section>
    <script src="index.js"></script>
</body>

Вот www/style.css:

.team{
    color: red;
}

.logo{
    height: 50px;
}

И, наконец, www/index.js:

var jsonObj = {
            "r1": [
                {
                    "team_name": "Bulldogs",
                    "team_seed": 1,
                    "logo_link": "https://images-na.ssl-images-amazon.com/images/I/61eSjtcXNVL._SX355_.jpg"
                }
            ],
            "r2": [
                {
                    "team_name": "Wildcats",
                    "team_seed": 16,
                    "logo_link": "https://i0.wp.com/www.stickertalk.com/wp-content/uploads/2015/11/833__68393.1440207109.1280.1280.jpg?fit=1280%2C1000&ssl=1"
                }
      ]
        };

        document.getElementById("r1-seed-1-name").innerHTML = jsonObj.r1[0].team_name;
        document.getElementById("r1-seed-1-logo").src = jsonObj.r1[0].logo_link;
        document.getElementById("r1-seed-1-seed").innerHTML = jsonObj.r1[0].team_seed;

        document.getElementById("r1-seed-16-name").innerHTML = jsonObj.r2[0].team_name;
        document.getElementById("r1-seed-16-logo").src = jsonObj.r2[0].logo_link;
        document.getElementById("r1-seed-16-seed").innerHTML = jsonObj.r2[0].team_seed;

Компоненты HTML, CSS и JavaScript работают отлично.function_to_change_json_here(), который я написал в R, также прекрасно работает сам по себе, но измененный JSON не отображается в пользовательском интерфейсе после нажатия кнопки или даже после использования session$reload().Я уверен, что кнопка регистрирует щелчок, так как «Clicked» все еще передается в консоли R.У меня также было function_to_change_json_here() переписать весь файл www/index.js, который затем вызывается, но ничего в пользовательском интерфейсе не меняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...