QuickAdd 如何获取Button内的参数

遇到的问题 :question:


如图所示,上面有一排按钮,点击后第一列会显示相关文件夹下的文件

预期的效果 :white_check_mark:

利用QuickAdd获取button的内在参数或者其他变量,可以实现上述功能

已尝试的解决方案 :ballot_box_with_check:

目前使用的办法是一个按钮对应一个QuickAdd宏,替换第7行就能实现其他按钮的功能
这段内容的功能是替换md内前3个相关的字段

module.exports = async (params) => {  
  const file = await this.app.workspace.getActiveFile();  
  let content = await this.app.vault.read(file);  
  
  // 正则公式,使用全局标志  
  let reg = /学习|生活|Misc/g;  
  let choice = "生活";  
  let replacedCount = 0; // 用于跟踪替换次数  
  let maxReplacements = 2; // 最多替换3次(不包括第一次)  
  
  // 使用一个函数来封装替换逻辑  
  function replaceUpToLimit(str, regex, replacement, limit) {  
      let result = str.replace(regex, function(match) {  
          if (replacedCount >= limit) {  
              return match; // 达到限制后不再替换  
          }  
          replacedCount++;  
          if (replacedCount === 1) {  
              // 第一次匹配时不替换(根据需求调整)  
              return match;  
          }  
          return replacement; // 替换为新的字符串  
      });  
      return result;  
  }  
  
  // 调用函数进行替换  
  content = replaceUpToLimit(content, reg, choice, maxReplacements + 1); // 因为第一次不替换,所以限制设为 maxReplacements + 1  
  
  // 保存修改后的文件  
  await this.app.vault.modify(file, content);  
};

我感觉是下面这么个意思, 不知道理解的对不对:

先用 Buttons 插件, 造按钮并把内部 action 设为一个 QuickAdd 宏, 该宏目的是把当前文件里的位于 dv 块里的某些字符串改掉, 最终实现点击了按钮, dv 就动态切换查询

如果就是这个意思, 且达到这目的就行, 那其实有些简单点的路啊

  • 用 dv 造按钮, 点击时把变量写到该笔记里, 比如藏在内联字段或者写个属性, 另外一个 dv 块自动读取
  • dv 同文件的两个块之间通信传参 (估计可行, 尚不确定)

以上都不涉及 Buttons 和 QuickAdd 能省点事


折中方案还有比如, 直接利用 Buttons 的编程机制往笔记里写字符串, 然后 dv 被动读这些参数


如果目的精确就是, 要点击 Buttons 按钮后, 把自身参数传给 QuickAdd 也许仍然是可行的, 目前还不会弄

1 个赞

是的,完全符合我的意思
谢谢你的回答和方法,我进行尝试

1 个赞