前面 #5506 的修复方案有问题,会导致 #5841 需要从事务层面解决该问题,即调用该 API 后会推送包含 `update` 操作的事务,这样前端会自动重新加载该块 DOM,块属性就不会丢失了。 有的挂件可能之前做过一些处理,该机制上线后会导致不兼容,需要挂件作者帮忙更新解决一下,谢谢。
Activity
🎨 调用 API `setBlockAttrs` 后推送 Transaction Fix #5847
Zuoqiu-Yingyi commentedon Sep 9, 2022
该方案会不会导致挂件 iframe 重新加载❓
88250 commentedon Sep 9, 2022
@Zuoqiu-Yingyi 会的,所以可能需要挂件进行适配。
Zuoqiu-Yingyi commentedon Sep 9, 2022
这问题不是适配能解决的, 属性里面一般保存一些需要持久化的状态与配置信息, 不能保存一次就重新加载一次呀, 这样所有运行时状态就全没了⚠
88250 commentedon Sep 9, 2022
不加载的话多开窗口会有覆盖问题,即使单开的话也有 #5506 的覆盖问题。有啥建议不?
Zuoqiu-Yingyi commentedon Sep 9, 2022
可以考虑新增一种
transactions
的action
或调整action: "update"
用于块属性的更新88250 commentedon Sep 9, 2022
前端一样还是要刷新的吧?
Zuoqiu-Yingyi commentedon Sep 9, 2022
只增删改块 DOM 节点的属性不会影响下级 iframe 节点,我目前实现方案就是这个
88250 commentedon Sep 9, 2022
那这样数据还是不一致哦。
Zuoqiu-Yingyi commentedon Sep 9, 2022
为什么会不一致呢❓
1 remaining item
Zuoqiu-Yingyi commentedon Sep 9, 2022
我当前的方案有这个问题,但是使用 transactions 推送就没有这个问题了
88250 commentedon Sep 9, 2022
所以目前就是考虑用 trans 推送 update 来刷新啊……
Zuoqiu-Yingyi commentedon Sep 9, 2022
我说的是使用 transactions 只推送某个块属性的更新而非整个块的 dom,前端接受推送后也只更新某个块的属性而非将整个块的 dom 替换
88250 commentedon Sep 9, 2022
我们新加一个 trans.op.action
updateAttrs
吧,前端仅刷新 iframe 标签属性。Zuoqiu-Yingyi commentedon Sep 9, 2022
是笔误吗,原意应该是 仅刷新对应块的块属性❓
88250 commentedon Sep 9, 2022
这两部分:
🎨 调用 API `setBlockAttrs` 后推送 Transaction #5847
🎨 fix #5847
Squashed commit of the following:
🎨 调用 API `setBlockAttrs` 后推送 Transaction Fix siyuan-note#5847
🎨 调用 API `setBlockAttrs` 后推送 Transaction siyuan-note#5847
🎨 fix siyuan-note#5847