如何在Obsidian QuickAdd脚本中提前获取Templater current_functions_object
解决Obsidian启动后QuickAdd脚本无法直接访问Templater current_functions_object的问题
问题原因
Templater的current_functions_object并非Obsidian启动时就完成初始化,而是在第一次触发模板渲染操作时才会被创建并加载到内存,所以刚启动时直接访问会返回undefined。
解决方案:主动初始化Templater函数对象
通过调用Templater内部的初始化方法,在脚本里主动触发current_functions_object的创建,无需手动触发模板。修改后的脚本如下:
async function testTemplaterPlugin(params) { const templaterPlugin = params.app.plugins.plugins['templater-obsidian']; let tp = templaterPlugin.templater.current_functions_object; if (!tp) { // 主动初始化Templater函数对象 await templaterPlugin.templater.init_current_functions(); tp = templaterPlugin.templater.current_functions_object; } if(tp) { console.log("Found the tp current functions object!"); } else { console.log("Unable to access the tp current functions object."); } } module.exports = testTemplaterPlugin;
原理说明
- Templater插件内部提供了
init_current_functions()异步方法,这就是手动触发模板时初始化current_functions_object的逻辑,直接调用即可完成预初始化。 - 先检查对象是否存在,不存在则调用初始化方法,并用
await等待异步操作完成,确保后续能正常访问tp对象。
额外注意事项
- 确保Templater插件为较新版本,旧版本可能未暴露
init_current_functions()方法,若报错可尝试更新插件到最新版。 - 必须保留
await关键字,否则异步初始化未完成时访问tp仍会得到undefined。
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

