使用 Meta Bind 和 DataviewJS 实现 Obsidian 交互式任务视图:按选定日期动态筛选
Meta Bind 和 DataviewJS 插件可创建一个带有交互式日期选择器的页面,用于查看任务。在阅读模式下,用户点击日历、选择日期——任务列表会自动更新。此解决方案利用 YAML 属性作为输入小部件和输出脚本之间的中间存储。
这消除了手动编辑 Tasks 或 Dataview 查询的需要,无需每次在代码中更改日期。
设置:安装插件和 YAML 块
通过 Obsidian 设置安装 Meta Bind 和 Dataview 插件。在 Dataview 中,启用 JavaScript 查询。
创建一个文件,例如 DynamicTasks.md,并添加 YAML 块:
---
selected-date: 2025-12-30
---
初始值将被小部件覆盖。
Meta Bind 小部件用于日期选择
在 YAML 下方插入:
INPUT[datePicker: selected-date]
在阅读模式下,会出现一个日历。点击打开日期选择器,值将保存到 selected-date。
DataviewJS 脚本:筛选和渲染任务
在小部件后添加脚本以搜索任务:
const targetDate = dv.current().file.frontmatter["selected-date"];
const pages = dv.pages('"Work"')
.where(p => p.file.tasks
.where(t => !t.completed && t.due && t.due.toISODate() === targetDate)
.length > 0);
for (let page of pages) {
dv.el("div", dv.fileLink(page.file.path, false), {
attr: {
style: "display:inline-block; margin:8px 0 4px 0; padding:3px 8px; border-radius:6px; background:#e0f0ff; color:#0366d6; font-weight:500;"
}
});
dv.taskList(
page.file.tasks
.where(t => !t.completed && t.due && t.due.toISODate() === targetDate),
false
);
}
脚本详解
- 读取日期:
dv.current().file.frontmatter["selected-date"]返回字符串YYYY-MM-DD。
- 搜索文件:
dv.pages('"Work"')扫描文件夹。过滤器检查未完成任务,其due日期通过.toISODate()匹配targetDate。
- 渲染:为每个文件——一个带有 CSS 样式的徽章链接和
dv.taskList,无分组(false)。将"Work"替换为您的文件夹。
集成到 Canvas 仪表板
将文件拖到 Canvas 上——Obsidian 会创建一个交互式卡片。调整大小。直接在仪表板上工作或点击导航。
要求和特性
- 任务语法:使用表情符号
📅 YYYY-MM-DD表示due。没有日期的常规复选框将被忽略。 - 更新:更改日期后,DataviewJS 会延迟约 1 秒重新启动。
关键点
- Meta Bind 的交互式 datePicker 无需手动编辑即可更新 YAML。
- DataviewJS 通过精确匹配
due.toISODate() === targetDate筛选任务。 - 按文件分组,带有自定义徽章以控制 UI。
- 在 Canvas 中自动渲染,无需额外插件。
- 适用于检查未来日期的工作量(如假期、会议)。
相对于静态查询的优势
| 方法 | 更改日期 | 阅读模式 | 自动更新 |
|------|----------|----------|----------|
| Tasks due on DATE | 在代码中手动 | 否 | 否 |
| Dataview due = date() | 在代码中手动 | 否 | 否 |
| YAML + Meta Bind + DataviewJS | 点击日历 | 是 | 是 |
此解决方案可扩展:在 .where() 中添加标签或状态过滤器。
— Editorial Team
暂无评论。