思源笔记社区正在搭建中,
现邀您共建
SiYuan Community is under construction. Join us to co-build.
思源笔记社区平台
文档
Docs
开发者
关于
关于
关于本站
关于我们
如何贡献
维护指南
在线维护
寻求帮助?
参与共建
文档
Docs
开发者
关于
关于
关于本站
关于我们
如何贡献
维护指南
在线维护
寻求帮助?
参与共建
查询
复制页面
思源笔记社区
简介
快速上手
最新进展
官方用户指南
精品新手教程
从入门到精通使用教程2024 (完结)
思源笔记如何备份
思源笔记如何免费同步
Inbox
基础指南
工作空间
切换工作空间
文件系统结构
缓解数据焦虑,思源笔记文件存储介绍(工作空间)
缓解数据焦虑,思源笔记文件存储介绍 2( 同步流程与本地文件)
缓解数据焦虑,思源笔记文件存储介绍 3(数据快照)
文档的文件名为什么是一串 ID?
笔记本和文档
新建笔记本
新建文档
行级元素
“行级元素”是什么概念,怎么理解?
数据库块
数据库功能简介
数据库的视图和布局
深入了解
开发者指南
AI
在思源里使用 deepseek 吧!
AI 配置的快速切换
在思源里使用最强(目前)的 AI Gemini 吧!
史上最简单的 MCP 使用教程(有手就行)
块引用
使用块引用进行快速输入
把反链当作批注、备注、评论使用
利用块引用对数据库进行快速输入
思源笔记中用反链管理内容的基本逻辑
互换块引用与原文
如何将反链转移?转移引用功能介绍
研究:Alt+7和Alt+B出现的反链面板有什么区别?
数据库
将反向链接和数据库结合的尝试
尝试通过查询语句来动态构建数据库
间隔重复系统
渐进视频笔记
闪卡 JS 片段
社区里对闪卡管理的分享
[js片段]| 定时扫描今日创建的闪卡,使其静默推迟 x 天
多端使用和同步
思源的同步方案与服务
想省大钱?思源笔记第三方同步 S3 手把手教程(使用七牛云对象存储 Kodo)(2024.4.25)
思源笔记同步指南
【萌新教程】思源笔记使用七牛云 KODO 配置 S3 同步,超详细!
第三方同步选择 - S3 服务商对比推荐
伺服
Docker 版 / 公网伺服最佳实践经验
手机伺服:教你如何免费获得一个随身携带的云笔记
把思源变成你的云笔记:随时随地访问家中的思源
手机伺服经验帖汇总(持续更新)
模板
模板教程
思源模板功能新人指南:模板语法 + 函数 + md 块语法
查询
思源 SQL 新人指南:SQL 语法 + Query + 模板
SQL 小助手
嵌入块查询
反链查询模板
杂项
进阶功能推荐
思源性能优化指南:如何使用火焰图排查卡顿问题
快速记录或者移动端记录的实现方式
自定义 UI 对话框(输入 / 确认 / 选项 / 表单)
如何快速打开指定工作空间?
思源笔记快捷键大全
分享
我宣布,目前最喜欢的视频剪辑软件是 camtasia 2025
思源sqlite客户端(SqliteStudio)推荐
你应当有个免费的 webdav
更多内容
常用名词解释
一图千言:为何说完美的笔记迁移只是幻想
移动端 App
彩蛋
资源汇总
链接汇总
思源笔记社区版
官方社区资源
交流渠道
集市资源
社区主题
社区图标
社区模板
社区插件
社区挂件
常见问题
寻求帮助?
思源是如何存储数据的?
支持通过第三方同步盘进行数据同步吗?
如何升级到新版本?
有的块(比如在列表项中的段落块)找不到块标怎么办?
数据仓库密钥遗失怎么办?
使用需要付费吗?
如何手动安装插件?
如何获取思源 API ?
如何在文档树创建“文件夹”?
如何使用代码片段?
思源有哪些奇淫技巧?
Docker版与其他客户端有什么不同?
如何查询颜色或背景标记的块或元素?
思源为什么不实现本地文档加密?
思源开发手机端如何调试?
参与贡献
如何贡献
维护指南
本站点有错误?
站点结构维护
关于
关于本站
关于我们
贡献者们
致谢
文档
Docs
开发者
关于
关于
关于本站
关于我们
如何贡献
维护指南
在线维护
寻求帮助?
参与共建
文档
Docs
开发者
关于
关于
关于本站
关于我们
如何贡献
维护指南
在线维护
寻求帮助?
参与共建
查询
复制页面
嵌入块查询
基本使用
#
嵌入块有两大功能,1是输入SQL语句,2是通过js查询。
通过SQL查找直接返回的结果是块内容,如果是文档块会获取文档的所有内容。
通过js查询,需要返回块id的数组,没查询到需要返回空数组,然后思源会根据块id获取块内容。
注意,这个输入框中的代码是在一个new Function函数体内,而这个函数体目前是不支持异步的
,如果你的代码中有异步调用,比如 await xxx()等,需要 外面封装已成异步函数或者用异步立即函数。
比如:
还有,
如果你在该函数体内调用第三方代码,在加载时,嵌入块并不能保证第三方代码加载完后再执行
,可能会出现报错第三方代码不存在情况。
解决办法,就是写代码等待第三方代码加载完毕再执行或加一定的延迟后再执行
,不过,一般这种情况不多,如果第三方代码不是很复杂,一般不用特殊处理,当出错时知道原因或有解决办法就行。
下面这个函数可用于等待第三方加载完成后执行
使用方法:
源码分析
#
怎样找到源码?
首先打开控制台,可以在思源主菜单 -> 开发者工具那里打开。
然后只需要再SQL查询输入框中输入debugger;关键词即可,在执行时,会自动在控制显示断点,断点位置就是源码的位置。
然后看到我们自己写的代码在一个匿名函数中,匿名函数传递了4个参数,分别是fetchSyncPost,item,protyle,top。
fetchSyncPost 是api请求函数
item 代表本嵌入块结点
protyle 代表嵌入块所在的文档对象
top 是滚动条距顶部位置,用于恢复滚动条位置,一般用不到
然后按F10进入后面的语句,然后来到下图的位置
这里可以看到刚才调用匿名函数的地方,通过在思源GitHub搜索
startsWith("//!js")
关键词就能找到源码位置
源码如下
https://github.com/siyuan-note/siyuan/blob/2ee69394da22d5cdbd30ae46b36f0bb4c8e15de4/app/src/protyle/render/blockRender.ts#L44
由源码可知,这里可以传入promise或数组,然后思源会根据传入的块id查询块内容,然后返回给渲染函数。
而且,这里通过new Function调用用户代码,由于new Function是同步函数,就会出现上面所说的异步调用需要包裹一层异步函数的问题。另外,如果依赖外部代码,也需要等待加载。
详情可参考issue
https://github.com/siyuan-note/siyuan/issues/13775
扩展功能
#
思源默认的嵌入块查询不支持指定字段查询,只能使用类似这样 的SQL查询。
那么,我想像下面这样查询怎么办?
能否实现这样的效果吗?
答案是肯定的。
只需要安装下面这个js代码片段即可。
传送门:
嵌入块查询扩展
然后只需要用下面两个SQL就可以立即实现上面的效果了。
但,这个查询扩展仅支持SQL查询,不支持js查询,要想支持js查询,可以以用简单查询js代码片段或QueryView插件。
传送门:
简单查询js:
https://ld246.com/article/1736035967300
QueryView插件:
https://ld246.com/article/1734099017098
修改于
2025-07-03 13:23:46
上一页
SQL 小助手
下一页
反链查询模板