如何修改Obsidian Dataview示例代码实现年度主题进度条?
如何修改Obsidian DataviewJS代码实现年度主题进度追踪?
需求背景
我想要在Obsidian中创建进度条,用于追踪年度内不同主题的进展。查阅了相关教程但理解不清晰,希望明确需要修改哪些内容来实现目标。
教程提供的示例代码
(await dv.tryQuery('TASK FROM "Test" ')).values.length const Tasks = dv.page("Test").file.tasks let CompletedTasks = Tasks .where(t => t.completed) dv.span( " * 100) + "/)" )
示例任务列表
- [ ] Quest 1 - [ ] Quest 2 - [ ] Quest 3 - [ ] Quest 4 - [ ] Quest 5
需要修改的核心内容
1. 替换任务页面的名称
代码里的"Test"是存放任务的页面文件名,你需要把两处"Test"替换成自己实际用来存放年度主题任务的页面名称,比如"2024年度目标"。
2. 按主题筛选任务(多主题场景)
如果你的任务页面里包含多个主题的任务,需要给任务添加标识(比如标签#学习、#健身),然后修改代码筛选对应主题的任务:
// 筛选带#学习标签的任务 const Tasks = dv.page("2024年度目标").file.tasks.where(t => t.tags.includes("#学习")) let CompletedTasks = Tasks.where(t => t.completed) dv.span( " * 100) + "/)" )
重复这段代码并修改标签,就能为每个主题生成单独的进度条。
3. 避免无任务时的报错
如果页面暂时没有任务,原代码会因为除以0报错,添加判断逻辑即可解决:
const Tasks = dv.page("2024年度目标").file.tasks let completionRate = 0 if (Tasks.length > 0) { const CompletedTasks = Tasks.where(t => t.completed) completionRate = parseInt((CompletedTasks.length / Tasks.length) * 100) } dv.span( "" )
4. 自定义进度条的标识文本
把代码里的![progress]替换成对应主题的名称,比如![健身进度],这样鼠标悬停时能直观看到进度对应的主题。
内容的提问来源于stack exchange,提问作者roybatty
相关产品推荐
相关产品推荐

