dataview这个插件很强大,我从一开始用obsidian就开始用这个插件了,尤其是他的dataviewjs,简直不要太爽。
问题和解决方法说明
但是有一些问题存在,下面我举个例子来进行说明。
例子:我想对日历使用dataviewjs进行索引,并对他们按年分类。
- ①解决方法1
-
方法:这个按照传统的方法,先写好对某年的日记的索引dv代码,然后复制粘贴编写好的代码改改就可以了。
-
缺点:假如这个代码在多处被复用,那么如果你想修改这个代码,那你就得找到这个代码被使用的每个地方,然后一个一个的修改他,很麻烦!
- ②解决方法2
-
方法:
- 在文档A编写dataviewjs代码 —— 一处编写
- 在dataviewjs代码中使用代码
app.workspace.getActiveFile()
获取你点击的文件,这是实现“一处编写,多处复用”的核心步骤
- 在文档B引用文档A,即
![[A]]
—— 多处复用
- 需要文档B的一些信息来配合文档A中的dataviewjs代码,比如文档的名称,路径……
- 现在当你点击文档B时,dataviewjs代码会根据你点击的文档展示对应的结果
-
优点:
- 你不需要在复制粘贴dataviewjs代码,而是只需要引用编写好dataviewjs代码的文档即可。
- 而且当你想要修改dataviewjs代码时,你只用修改一处即可。
下面展示下我的示例
对日记按年索引,只在一个位置编写dataviewjs代码,在其它以年份命名的文档进行引用,即可实现点击某个以年份命名的文档,dataviewjs就会显示该年的日记。
- 编写dataviewjs的文档
- 以年份命名的文档:如2022
4 个赞
代码有的内容可能是不需要的旧代码,只是懒得改了
// 可选参数
var Year = app.workspace.getActiveFile().basename
// 年份:例如:"2021",不填则赋值 false
var Month = false
// 月份:例如:"07",不填则赋值 false
// 请勿设置 daily日记插件的日期格式,保持系统默认:YYYY-MM-DD
// ===================================================================
// 日期格式正则校验
if (Year && Month) {
dv.header(3, Year + "-" + Month);
var dateFormat = new RegExp(Year + "-" + Month + "-\\d{2}");
}
else if (Year && !Month) {
dv.header(3, Year);
var dateFormat = new RegExp(Year + "-\\d{2}-\\d{2}");
}
else if (!Year && Month) {
dv.header(3, Month);
var dateFormat = new RegExp("\\d{4}-" + Month + "-\\d{2}");
}
else {
dv.header(3, "All Daily Notes");
var dateFormat = /\d{4}-\d{2}-\d{2}/;
}
// 获取负荷日期格式的日记
var dailyNotes = dv.pages().where(b => dateFormat.test(b.file.name)&&b.file.name.length==10).sort(b => b.file.name, 'desc')
// 处理展示日记
var showDaily = new Array();
for (var page of dailyNotes) {
var dstr = page.file.link
// 处理周几
var weekArray = new Array("日", "一", "二", "三", "四", "五", "六");
var week = weekArray[new Date(`${page.file.name}`).getDay()]
dstr = dstr + ` 周${week} `
// 处理待做
var todo = " 🟢 "
if (page.file.tasks.length) {
for (var task of page.file.tasks) {
if (!task.completed) {
todo = " 🔴 "
break
}
}
}
dstr = dstr + todo
// 处理des
dstr = dstr + " " + page.des
showDaily.push(dstr)
}
dv.list(showDaily)
2 个赞