页面结构
每个页面一个目录:page.json 描述长什么样,同目录 page.js 用 Page({}) 填数据、响应操作。
建议先把 JSON 结构搭出来,再写生命周期和页面事件。组件清单见 组件。
| 只展示固定内容 | 数据会变 | |
|---|---|---|
| 文案 | 直接写在 page.json | 写成 {{hello}} / bind,在 onLoad 里 this.setData |
page.js | Page({}) 即可 | Page({ data });也可 Http.get 后再 setData |
| 适用 | 关于、说明、固定入口 | 表单回填、列表、统计 |
入口 homePage 为首页目录,例如 pages/home。page.js 可用 require 引入其他 JS,路径规则见 require。
页面字段
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | String | 否 | 页面标记。跳转可写文件夹,或入口 pages 中的 id |
| title | String / Object | 否 | 导航栏。不写则不显示。字符串为标题;对象见下表 |
| style | Object | 否 | 内容区样式:padding / margin / background 等。未写 padding 时为 16 |
| statusBar | String / Object | 否 | 顶部状态栏。字符串为背景色;对象为 background + color(light / dark) |
| js | String | 否 | 默认加载同目录 page.js。见 页面生命周期、页面事件 |
| enablePullDownRefresh | Boolean | 否 | 打开整页下拉。见 下拉刷新 |
| body | Array | 是 | 组件列表。组件可写 action / onTap,见下方 JSON action、页面事件 |
| popups | Array | 否 | 弹层。显示隐藏用 showIf。要嵌自定义组件,在弹层 body 里写 { "type": "choose" },见 组件结构、组件 · Popup。动作面板、图片查看器写在 body 里,同样用 showIf,见 ActionSheet、ImageViewer |
以上字段会覆盖 deekeScript.json 里 window 参数的同名配置。先加载 deekeScript.json 的 window,再加载当前页面。
title 为对象时:
| 参数名 | 类型 | 说明 |
|---|---|---|
| text | String | 标题文案,支持 {{path}}(如 ,对应 Page.data) |
| hidden | Boolean | true 则隐藏导航栏 |
| fontSize | Number | 字号,单位 sp |
| color | String | 文字颜色 |
| background | String | 导航栏背景色 |
| fontWeight | String | bold |
| align | String | left / center / right |
| style | Object | 也可把 fontSize / color 等写在 style 里 |
{
"title": {
"text": "{{pageTitle}}",
"fontSize": 18,
"color": "#FFFFFF",
"background": "#006A65"
}
}{
"title": {
"text": "工作台",
"fontSize": 18,
"color": "#FFFFFF",
"background": "#006A65"
}
}{ "title": { "text": "关于", "hidden": true } }内容区写在 style 里,覆盖全局 window.style:
{
"style": { "padding": 16, "margin": 0, "background": "#F5F5F5" },
"statusBar": { "background": "#006A65", "color": "light" },
"body": []
}组件字段见 组件。把一组内置组件打包复用,见 自定义组件。事件和数据见 父页交互。
JSON action
body / 弹层里组件上的 action 是结构字段:轻触后由框架直接执行。也写在 组件 · 通用字段。
与 onTap(或 onClick)同时存在时:先调用 Page 方法,再执行 action。事件回调见 页面事件。字符串字段会做 {{path}} 替换(如 {{item.id}})。
只支持下列 type,不要编造其它 action(例如不要写 executeScript / runScript / showModal):
| type | 说明 | 主要字段 | 对应 Page 方法 |
|---|---|---|---|
navigate | 打开另一页(每次新页面) | page、params | this.navigate |
redirect | 关掉当前二级页再打开 | page、params | this.redirect |
switchTab | 切到底栏某一项 | page 或 index | this.switchTab |
back | 关闭当前二级页 | 无 | this.back |
toast | 短提示 | text,可选 duration | this.toast |
save | 弹「已保存」类提示(仅 JSON) | toast(可选,默认「已保存」) | 无同名方法;真正写入放在 onTap |
openUrl | 用系统浏览器打开外链 | url | this.openUrl |
跳转细则(栈、底栏、params)见 页面跳转。
navigate / redirect / switchTab / back
{
"type": "button",
"text": "打开详情",
"action": {
"type": "navigate",
"page": "detail",
"params": { "id": "{{item.id}}", "from": "stats" }
}
}{ "type": "button", "text": "替换打开", "action": { "type": "redirect", "page": "detail", "params": { "id": "2" } } }{ "type": "button", "text": "切到统计", "action": { "type": "switchTab", "page": "pages/stats" } }{ "type": "button", "text": "返回", "action": { "type": "back" } }page:目标页文件夹(如pages/detail)或入口pages里注册的id- 底栏之间用
switchTab,不要用navigate - 底栏根页上的
back不会退出应用
toast / save / openUrl
{ "type": "button", "text": "提示", "action": { "type": "toast", "text": "已保存" } }{ "type": "button", "text": "保存设置", "onTap": "onSave", "action": { "type": "save", "toast": "已保存" } }{ "type": "button", "text": "官网", "action": { "type": "openUrl", "url": "https://deeke.cn" } }toast.duration:可选,与this.toast({ text, duration })一致(如'long')save只负责弹提示;Storage.put等写入写在onTap对应方法里整页外链用
openUrl,不要指望 WebView 与 Page 通信确认框用全局
Dialogs从按钮跑任务:见 执行脚本
固定内容
结构和文案都写在 JSON 里,page.js 用空的 Page({}) 即可。
数据会变
文案写成 {{hello}},表单用 name 对应 data 里的键。初始值放 Page({ data }),接口数据在 onLoad 里 this.setData。列表、触底加载见 List。
模板 {{path}}
| 写法 | 含义 |
|---|---|
{{hello}} | data 中的字段 |
{{data.hello}} | 同上 |
{{item.title}} | 列表当前项 |
{{index}} | 列表下标,从 0 开始 |
{{params.id}} | 跳转参数 |
{{storage.task_name}} | 本地 Storage |
{{item.tags.0}} | 数组下标 |
路径不存在时替换为空字符串。点击、显示条件等写在组件上,见 组件 · 通用字段。
