在各种情况下变异反应式变量
- ::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` 宏访问。
若要从其他上下文访问为路由创建的模型,必须将该模型设为全局模型。