You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 12:30:58