你在这里。看看这个问题与其他知识怎样相连。
选择节点前往页面 · 展开后可留在地图中阅读
一个问题
overlay:弹窗的打开状态放在哪里?
overlay 表达弹窗等覆盖式界面,并为打开或关闭保留明确状态。
删除确认框可以包含标题、说明和确认动作。它是否打开属于界面状态;用户确认后执行什么,是另一个操作合同。关闭弹窗不等于撤销已经执行的操作。
先认识这些属性
mode 选择弹出界面的形式,例如示例里的确认框;title 是标题,message 是说明。是否打开由 state.open 表达,不是标题或说明的一部分。示例的 intent: "error" 提示要用错误或危险语义呈现,它不是“删除已经失败”的执行结果;confirmLabel 则是确认按钮上的文字。
confirm 与 cancel 区分确认和取消;注册表还列出 open、dismiss、select。不同模式支持怎样的交互,应核对具体实现,不能把每个弹窗都当成完整支持所有事件。
读一个结构例子
以下摘自源码注册示例。它展示结构,未在本页运行;示例中的路径和动作需要应用提供。
{
"id": "confirm-delete",
"type": "overlay",
"props": {
"mode": "confirm",
"title": "Delete item?",
"message": "This action cannot be undone.",
"intent": "error",
"confirmLabel": "Delete"
},
"state": {
"open": true
},
"events": {
"confirm": {
"exec": "/items/.actions/delete",
"args": {
"id": "123"
}
},
"cancel": {
"exec": "/dev/ui/.actions/close-overlay"
}
}
}顶层 id: "confirm-delete" 标识这个弹窗节点;删除动作收到的 args.id: "123" 则标识要删除的条目。例子固定使用 123,实际应用需要传入用户当前选择的条目标识。
例子里弹窗已经打开。确认会调用删除动作,取消会调用关闭弹窗的动作。这是两条不同的连接;删除动作一旦执行,后来关闭界面并不会自动撤销它。
检查一下理解
确认框是否打开,与删除是否完成有什么关系?
打开状态是界面状态;删除是否完成取决于确认动作的执行结果。