atomm 对象

atomm 是平台 SDK(platform-sdk.js)加载后注入到页面的全局对象,提供平台能力与 UI 工具。在生成器代码中可直接使用。

生命周期 atomm.lifecycle

通过 lifecycle.on 注册平台生命周期钩子:

atomm.lifecycle.on('export', async () => { ... })

UI 提示 atomm.ui

弹出平台全局提示(toast)。参数为对象:

  • type:可选 success / warning / error / info,默认 success
  • message:提示文案
  • duration:可选,展示时长,单位秒,0 表示不自动关闭;不传默认 3 秒

toast() 返回本条提示的 id;用 closeToast(id) 主动关闭。duration: 0 的常驻提示必须这样关,否则会一直挂着。

atomm.ui.toast({ type: 'success', message: '已完成' })

// 指定展示 5 秒
atomm.ui.toast({ type: 'info', message: '正在处理…', duration: 5 })

// duration: 0 常驻不自动关闭,任务完成后用 closeToast 关掉
const id = await atomm.ui.toast({ type: 'info', message: '导出中…', duration: 0 })
// …任务完成…
await atomm.ui.closeToast(id)
toast 必须传对象

传字符串(如 toast('已完成'))不会生效——平台只读取对象上的 message 与 type,字符串会被当成空消息。ui 命名空间目前提供 toast(返回提示 id)与 closeToast。

语言 atomm.app

平台当前的界面语言,用来让生成器跟着平台一起本地化。

// 当前语言短码,必定是受支持的 17 种之一
const locale = await atomm.app.getLocale()

// 全部受支持语言(短码 + 展示名)
const locales = await atomm.app.getSupportedLocales()
// → [{ code: 'zh', name: '简体中文' }, { code: 'en', name: 'English' }, …]

在首次渲染之前读一次语言,用它初始化文案后再挂载应用,界面就不会先闪一下默认语言:

let locale = 'en'
try {
  locale = await atomm.app.getLocale()
} catch {
  // 不在平台内(如直接打开页面)会立即失败,沿用默认语言
}
// 用 locale 初始化文案后再挂载应用

这是一次性读取,不是订阅——平台切语言会整页重载,你的应用随之重启并读到新值,不需要自己监听变化。生成器里也不要另放语言切换:它只能切生成器自己,会和平台界面的语言对不上。

getLocale() 返回的一定是下表这 17 种之一,但你的应用未必都翻译了。拿到没有对应文案的语言时,回退到英文或你自己的默认语言。

短码展示名语言
zh简体中文简体中文
enEnglish英语
zh-hant繁體中文繁体中文
deDeutsch德语
esEspañol西班牙语
frFrançais法语
itItaliano意大利语
ja日本語日语
ko한국어韩语
ruРусский俄语
ukУкраїнська乌克兰语
slSlovenščina斯洛文尼亚语
thไทย泰语
plPolski波兰语
csČeština捷克语
idBahasa Indonesia印尼语
viTiếng Việt越南语

表格顺序即 getSupportedLocales() 的返回顺序,「展示名」就是它返回的 name。

本地怎么测多语言

开发工具包的「模拟器」里有「预览语言」下拉,切换会改变 getLocale() 的返回值并重载生成器,不用真到平台上切语言。见开发工具包。

用户 atomm.user

// 当前是否已登录(只回布尔,不含 token 与个人信息)
const loggedIn = await atomm.user.isLoggedIn()

// 未登录时主动拉起登录弹窗,等用户登录完成后继续;返回最终是否已登录
if (!loggedIn) {
  const ok = await atomm.user.login()
  if (!ok) return // 用户取消或登录失败
}
// 到这里已登录,继续你的逻辑
login 必须在用户手势里调用

login() 只在用户点击等手势发生后约 5 秒内放行,脚本自行发起的调用会被平台拒绝,并在控制台指出。把它放进点击回调即可,这同时也避免了被浏览器弹窗拦截。登录是耗时交互,平台已为它放宽超时(约 5 分钟),无需你自己加超时。

不在平台内时

直接打开页面(没有经平台承载)时,atomm.ui、atomm.app、atomm.user 的调用都会立即失败(Promise 被 reject),不会卡住。代码可能在平台外运行时,直接调用并用 try/catch 兜住即可:

try {
  await atomm.ui.toast({ type: 'info', message: 'hi' })
} catch {
  // 不在平台内,忽略
}
Esc
输入关键词搜索全部文档 · ↑↓ 切换 · ↵ 打开