Джулия: вызывать функцию всякий раз, когда маршрут обновляется?

avatar
neutrino
9 августа 2021 в 05:50
64
0
3

У меня есть маршрут Genie, который отображает html-страницу. Страница должна отображать список html-элементов на основе столбца в таблице базы данных (например, список друзей):

route("/") do
  html(refresh())
end

Функция обновления получает HTML из функции logFriend (которая использует макрос).

function refresh()
  loggingPage = logFriend()
  return loggingPage
end

Это сообщение (на странице также есть ввод текста и отправка). После отправки пользователем отображается кадр данных, показывающий содержимое обновленной таблицы базы данных.

route("/", method = POST) do
  queries.insertFriend(postpayload(:friend))
  refresh()
  ob2 = getFriends()
  return ob2
end

Ниже приведен макрос, который создает элементы HTML на основе столбца базы данных, и функция, которая добавляет их в HTML.

macro htmlFriends()
    str1 = ""
    friendList = getFriends().friend
    for x in friendList
        str = "<li>$x</li>\n"
        str1 = str1 * str
    end
    return str1
end

function logFriend()
    m1 = @htmlFriends
    pa = "style='text-align:left"
    logPage = """
        <form action="/" method="POST" enctype="multipart/form-data">
        <script>
        for (let i=0; i<9;i++)
          document.write("hi");
        </script>
          <body  $pa> List of Friends
              $m1
              <div $pa>friend!
                  <input type="text" name="friend" value="" />
              </div>
              <div $pa>
                <input type="submit" value="submit" />
              </div>
          </body>
        </form>
        """
        return logPage
    end

Но элементы списка на странице не обновляются при обновлении.

Прямо сейчас, если я запущу функцию logFriend вручную, а затем повторно запущу маршрут с функцией обновления внутри, он отобразит нужные элементы. Но я не хочу обновлять вручную, я хочу, чтобы это было автоматически. Я попытался изменить обновление на макрос, который можно запустить на маршруте, но проблема не в этом. Буду признателен за любую помощь!

Источник

Ответы (0)