对于dataviewjs查询的任务可以互动么

本身是js代码,那么应该是可以用.onclik进行行为绑定的? 而且dataview quert 的日历视图本身也是可以点击的,那么能否单dataviewjs 脚本实现搜索任务和互动的能力?

有点难搞, 似乎普通情况下, 用它自带的 taskList 就是最简单的

```dataviewjs
const frag = dv.taskList(dv.pages('"path/to/subfolder"').file.tasks.mutate(t => {
	t.visual = `<span style='display: table-cell; width: 300px'>${t.text}</span> <span style='display: table-cell; width: 200px'>(${t.section})</span>` 
}), false)
```

其中那个 t.visual 可用于在界面上重新设定 task 显示文本, 这机会可善加利用, 比如给 task 补充注释一些额外信息什么的

显示样式可以拿 css 搞一搞

这种调 taskList 函数的办法, 其生成的 HTML 元素可以点击互动, 点击 “完成” 后, 这修改真会存到对应笔记里

至于动态 “搜索任务”, 似乎有不少给搜索条件写按钮的 dvjs 样例, 可能道理类似

问题:

  • 再怎么折腾, 也还是像 dv.list 而不像 dv.table (现在还没有 dv.taskTable 这函数)
  • 遇到 task 嵌套时, 排版困难
  • 交互仅限于点击 checker “完成任务 / 取消完成”, 更复杂的搞不定

但这是个动静较小, 好理解的方案


另两条更复杂的路线是

1 在 dvjs query 后, 把 task 信息完整的记录下来, 然后在已生成 DOM 元素之后, 给这些 task 的 <input> 绑定事件处理函数, 大致是模仿 dv 那个 rewriteTask 处理函数去改原笔记 (rewriteTask 干的事就是读笔记的纯文本, 找到 task 所在行, 给改个 [x] 出来, 写回去)

2 在 dvjs 生成表格时, 想办法让表格中的某些 cell 不只显示 “杀毒后的纯 markdown 片段”, 而是还要显示带 UI 交互的, 类似 dv.taskList 生成的片段

显然都比较折腾, 我先去研究了方案 2, 没搞定…

1 个赞

感谢耐心回答,我试试用css 和taskList 来做就好的

1 个赞