分享一个小技巧,利用 Kanban、Templates、dataview 协作,自动获取 Kanban 的笔记卡片的待办项

利用 Kanban、Templates、dataview 协作,自动获取 Kanban 的笔记卡片的待办项

是我捣鼓一两个小时捣鼓出来的!

完成后的大致效果

左下角那个四个复选框就是结果。


做法

三者结合,就能创建一个类似这样的 Kanban 专用的笔记模板:

---
actions: |
  ```dataviewjs
  let tasks=dv.page('Kanban Tasks/Projects/{{title}}')
    .file.tasks.where(t => !t.completed);
  if(tasks.length) dv.taskList(tasks, false);
  else dv.el('b', 'no actions.');
  ```
---
# {{title}}

加点注释方便理解:

---
actions: | ← 这个竖线是YAML语法,用来添加跨行字符串并保留换行符。而 metadata `actions` 对应 Kanban 的设置项。
  ```dataviewjs
  //这个代码读取指定页面里未完成的待办项
  //注意这里的 `'看板笔记/的默认路径/{{title}}'` 是给 `Templates`插件用的,要根据你在看板中设置的`Note Folder`来填。
  //比如你设置的`Note Folder`是`My Projects` 那么就该填 `'My Projects/{{title}}'`。
  let tasks=dv.page('看板笔记的/默认路径/{{title}}')
    .file.tasks.where(t => !t.completed);
  if(tasks.length) dv.taskList(tasks, false); //这条语句判断有没有找到待办项,有就显示,
  else dv.el('b', 'no actions.'); //没有就显示加粗的 `no actions.`
  ```
---
# {{title}}

然后把这个模板添加到Kanban中,并且 Note Folder 与上面代码相对应。


并在 Kanban 设置的 Linked Page Metadata 中添加 actions,启用 Hide labelField contains markdown

这之后,点击卡片的 New Note from Card 创建的笔记就能自动展示待办项了。

原理

根据你的设置,Kanban 会自动读取每条笔记的 actions metadata 并显示出来,而 actions 中的内容是 dataview 语句,它自动执行时会显示对应笔记中的所有任务,这样就把任务都显示出来了。

缺点

  • 如果你改了笔记标题,或者指定了新的 Note Folder,那么要同步修改每条笔记中的 metadata actions 中的路径和标题,否则 Kanban 会报错。
  • 在 Kanban 中只能打勾和浏览,修改待办项的内容要进入笔记中。

Bonus

其实 Kanban 不只能识别 dataview,其他代码也能识别,比如 mermaid。不过这种图片如果太宽了,渲染会出问题导致显示不完整。

2 个赞

十分感谢分享用法。