28 lines
1.9 KiB
Plaintext
28 lines
1.9 KiB
Plaintext
// 代码与原生侧栏都操作真实 Page 对象;activate/close/open 改变展示关系,业务对象可继续被全局引用保留。
|
|
// 三个页面共存于同一 VM,最后 first.activate 选择初始展示页。
|
|
// 当前宿主通过侧栏管理页面;Page 的代码接口保持同一业务身份。
|
|
// 创建持有计数器与按钮的页面;切到其他页不等于销毁 count。
|
|
first = Page()
|
|
first.title = "共享计数"
|
|
count = ui.state(0)
|
|
// connection 保存输入订阅,textOf 另外建立值到文字的绑定;二者共用 count,但承担不同调用职责。
|
|
increment = Button("加一")
|
|
connection = increment.on("click", count.increment)
|
|
first.render(Column(24,16,TextBlock("切换页面后,计数对象继续存在"),ui.textOf(count,"value"),increment))
|
|
|
|
// 另一页演示 Page 生命周期与快捷键;界面提示是示例文案,实际导航位于当前宿主侧栏。
|
|
second = Page()
|
|
// 第二页有自己的内容根,没有引用 count;切页不等于把第一页面里的对象移进第二页面。
|
|
second.title = "另一个页面"
|
|
second.render(Column(24,16,TextBlock("点击上方 Tab 切换;× 关闭页面"),TextBlock("Ctrl+Tab 切换,Cmd/Ctrl+W 关闭;代码可调用 first.open() 重开")))
|
|
|
|
// 独立内容页面仍用同一个运行时的原生类型和资源注册表。
|
|
third = Page()
|
|
// 三个全局 Page 引用在 close 后仍可保留页面业务身份,重新 open 会建立新的有效展示上下文。
|
|
third.title = "窗口与布局"
|
|
third.render(Column(24,16,TextBlock("每个 Tab 都是同一个 VM 中的 Page 对象"),RectBlock(240,80,8,"#237A45")))
|
|
// 重新激活第一页面,原生侧栏和源查询可观察相同 active 状态。
|
|
first.activate()
|
|
// 当前活动页切回 first 后请求该窗口标题,命令由成功输入后的 GUI 处理,不在这里同步操作原生窗口。
|
|
ui.window().setTitle("Endor Pages")
|