sch_PrimitiveText.delete 返回成功但未进入文档持久化事务,保存重开后文字恢复
- Dominant language
- TypeScript
- Stars
- 64
- Forks
- 26
- PR merge metrics
- No merged PRs in 30d
Description
## 环境
- 嘉立创 EDA 专业版:V3.2.148(Web)
- `@jlceda/pro-api-types` / API:`eda.sch_PrimitiveText`
- 调用环境:编辑器扩展
- 测试日期:2026-07-24
## 问题描述
调用 `eda.sch_PrimitiveText.delete()` 删除原理图文字时,Promise 正常返回成功,`getAll()` 立即读回也确认文字已经从当前内存态消失;随后调用原理图保存,保存同样返回成功。
但是关闭并重新打开该原理图页后,被删除的文字会全部恢复。删除似乎没有进入 EasyEDA 的文档持久化/undo-autosave 事务。
相同文字如果先通过 `eda.sch_SelectControl.doSelectPrimitives(ids)` 选中,再在编辑器界面执行原生 Delete 和 Ctrl+S,则关闭重开后不会恢复。
## 最小复现
```ts
const before = await eda.sch_PrimitiveText.getAll();
const id = before[0].primitiveId;
const deleted = await eda.sch_PrimitiveText.delete(id);
const afterDelete = await eda.sch_PrimitiveText.getAll();
// deleted === true
// afterDelete 中已不存在 id
// 使用公开保存接口或编辑器 Ctrl+S 保存
// 关闭当前原理图页并重新打开
const afterReopen = await eda.sch_PrimitiveText.getAll();
// id 再次出现
```
批量删除也可稳定复现:
```ts
await eda.sch_PrimitiveText.delete(ids);
```
## 实测数据
在同一工程 4 个 A4 原理图页上重复验证:
| 页面 | API 删除后的内存数量 | 保存并重开后的数量 | 改用原生 Delete 后重开 |
|---|---:|---:|---:|
| 01-POWER | 5 | 36 | 5 |
| 02-MCU | 2 | 26 | 2 |
| 03-USB-DL | 2 | 24 | 2 |
| 04-IO-HMI | 5 | 15 | 5 |
另外尝试在 API 删除后,通过 API `modify()` 移动保留文字并保存,重开后被删除文字仍恢复。通过界面方向键移动保留文字并保存,只能持久化该移动事务,也不会连带提交之前的 API 删除。
最终可行 workaround:
1. `eda.sch_SelectControl.doSelectPrimitives(ids)`;
2. 编辑器原生 Delete;
3. Ctrl+S;
4. 关闭并重开,删除稳定保留。
## 期望行为
`eda.sch_PrimitiveText.delete()` 成功返回时,应与编辑器原生 Delete 一样:
- 进入文档 dirty/undo/autosave 事务;
- 保存后持久化;
- 关闭重开后文字不会恢复。
如果该 API 仅修改临时内存态,也希望文档明确说明,并提供可提交事务的公开 API。
## 影响
自动化扩展会收到成功返回和正确的即时读回,因此容易误判删除已落盘。只有关闭重开后才能发现脏文字恢复,可能造成原理图重复标题、注释叠加以及批处理结果不幂等。
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.