导入要保留来源类型以选对渲染链

**内容导入时如果把不同来源的正文塞进同一个字段,就会丢掉「它原本是什么格式」这个信息,渲染时自然选错渲染链。** 表现为:知识库里的剪藏打开后不像剪藏,而是像普通笔记。

症状与根因

现象根因
知识库里的剪藏内容格式和剪藏区不一样订阅导入时把 HTML 正文直接塞进 content_md,于是走了 Markdown 渲染链
同一个剪藏,从「已有剪藏」导入是对的,从「订阅」导入是错的两条导入路径给的正文格式不同(前者已是解析后的正文格式),但落库字段相同

格式与字段是两件事:content_html 和 content_md 不是可互换的容器。剪藏解析器会把网页转成适合 ClipReader 的正文格式;跳过这一步直接落库,等于把 HTML 当成 Markdown 读。

判断与做法

  1. 落库时要保留来源类型(如 kind: 'note' | 'clip' | 'html'),它决定打开时用哪个渲染器 —— 图标、阅读器、滚动行为都跟着这个类型走。
  2. 多来源入口必须收敛到同一个「归一化」步骤:不管从剪藏导入还是从订阅导入,都先转成该类型对应的正文格式,再落同一个字段。否则每加一条导入路径就会多一种格式事故。
  3. 症状「格式不对」先问:这条内容是从哪个入口进来的?它进来时是什么格式? 而不是先怀疑渲染器。

延伸:来源类型要落库,别在显示层临时推断

同一个问题在展示层的翻版:知识库里的剪藏卡片该显示「文章 / 媒体 / 视频」图标,而不是统一的剪藏图标。但数据模型里没有持久化的内容类型字段,只能靠 url / sourceName 做启发式判断(域名命中 YouTube/B 站 → 视频;命中少数派/36氪 等 → 媒体;其余 → 文档)。

  • 启发式能用,是因为「先加剪藏再加知识库」引用的是同一条 clip 记录,url / sourceName 还在。
  • 代价:规则散在显示层,每加一处展示就要重算一次,且判断标准不一致。
  • 更稳的做法:创建剪藏时识别一次 contentType 落库,之后全局复用。

判据同一条:「它是什么类型」是一次性可判定的信息,就应该在入库时算一次存下来,而不是留给每个消费者各自推断。

相关