Engee 文档

在各种情况下变异反应式变量

::alert{type="info"} This is an advanced example.

按顺序打开这些路线的浏览器选项卡:/ /test /global`您会看到,当访问/global` 时,/test 标签中的文本将变为`global!` 。

module App
using GenieFramework, Stipple
@genietools

@app begin
    @out message = "Hello!"
    @onchange isready begin
        @show "App is loaded"
        @show __model__
    end
end

route("/test") do
    global model = @init
    @show "Test route"
    @show model
    model.message[] = "test!"
    page(model, ui()) |> html
end

route("/global") do
    @show "Global route"
    model.message[] = "global!"
    page(model, ui()) |> html
end

ui() = "{{message}}"

@page("/", ui)
Server.up()
end

也可以从`App` 模块外部修改模型,如

App.model.message[] = "Outside of App module"

Explanation

反应式变量只能在`@onchange` 块中直接访问,可以通过变量名或`__model__` 对象访问。该`__model__` 是一个`ReactiveModel` 结构,用于保存反应式变量和`@app` 中的代码。

当路由发出请求时,会为该特定请求创建一个新模型。该模型保存了`@app` 中声明的反应式变量和代码的副本,可通过`@init` 宏访问。

若要从其他上下文访问为路由创建的模型,必须将该模型设为全局模型。