Многостраничные приложения
Есть несколько возможных шаблонов для приложений с реактивными страницами. Более подробные сведения о создании реактивных приложений см. в руководстве Создание первой информационной панели и в документации.
Приложение с несколькими страницами в одном модуле
Если логика приложения достаточно простая, ее можно поместить в один модуль, даже если страниц несколько. Просто нужно определить дополнительные маршруты для каждой страницы, как в этом примере, в котором используется модуль StatisticAnalysis
, определенный здесь:
module App
using GenieFramework
using Statistics
@genietools
# Реализуем реактивный код
@app begin
@in N = 0
@out m = 0.0
@out name = "John"
@onchange N begin
m = mean(rand(N))
end
end
# Определяем пользовательский интерфейс для каждой страницы
index() = [h1("Welcome {{name}}!"), a(href="/form")]
function formui()
cell([
textfield("How many numbers?", :N),
p("The average of {{N}} random numbers is {{m}}"),
])
end
# Определяем маршруты
@route("/", index) # используем route вместо @page, чтобы не нужно было внедрять лишний код JavaScript
@page("/form", formui)
end
Есть и другой вариант — поместить код пользовательского интерфейса в отдельный файл и включить его следующим образом:
@page("/", "ui.jl")
cell([
textfield("How many numbers?", :N),
p("The average of {{N}} random numbers is {{m}}"),
])
Приложение с несколькими модулями
Если страницы выполняют разные функции, например, одна страница — это информационная панель, а другая — панель настройки, их можно реализовать в отдельных модулях логики. После этого нужно просто включить каждый модуль в основной файл app.jl
, как в данном примере:
module App
using GenieFramework
include("Index.jl")
include("Form.jl")
end
module Index
using GenieFramework
@app begin
@out name = "John"
end
function ui()
h1("Welcome {{name}}!")
end
@page("/", ui)
end
module Form
using GenieFramework
using Statistics
@app begin
@in N = 0
@out m = 0.0
@onchange N begin
m = mean(rand(N))
end
end
function ui()
cell([
textfield("How many numbers?", :N),
p("The average of {{N}} random numbers is {{m}}"),
])
end
@page("/form", ui)
end