跳到主要内容
知识地图overlay:弹窗的打开状态放在哪里?ArcBlock 体系

你在这里。看看这个问题与其他知识怎样相连。

选择节点前往页面 · 展开后可留在地图中阅读

知识地图沿着连接,读懂一个问题
← AFS 与界面

一个问题

overlay:弹窗的打开状态放在哪里?

overlay 表达弹窗等覆盖式界面,并为打开或关闭保留明确状态。

删除确认框可以包含标题、说明和确认动作。它是否打开属于界面状态;用户确认后执行什么,是另一个操作合同。关闭弹窗不等于撤销已经执行的操作。

先认识这些属性

mode 选择弹出界面的形式,例如示例里的确认框;title 是标题,message 是说明。是否打开由 state.open 表达,不是标题或说明的一部分。示例的 intent: "error" 提示要用错误或危险语义呈现,它不是“删除已经失败”的执行结果;confirmLabel 则是确认按钮上的文字。

confirm 与 cancel 区分确认和取消;注册表还列出 open、dismiss、select。不同模式支持怎样的交互,应核对具体实现,不能把每个弹窗都当成完整支持所有事件。

读一个结构例子

以下摘自源码注册示例。它展示结构,未在本页运行;示例中的路径和动作需要应用提供。

json
{
  "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,实际应用需要传入用户当前选择的条目标识。

例子里弹窗已经打开。确认会调用删除动作,取消会调用关闭弹窗的动作。这是两条不同的连接;删除动作一旦执行,后来关闭界面并不会自动撤销它。

查看 overlay 的技术文档。

检查一下理解

确认框是否打开,与删除是否完成有什么关系?

打开状态是界面状态;删除是否完成取决于确认动作的执行结果。