「已解决」如何在 Dataview 中实现点选交互?

原问题和需求

  1. 个人想用 table 表格的形式做任务管理,同时想实现「多种状态的勾选」,就一个小小的点选交互,因为我发现鼠标移动到链接上时,弹出的面板能承载一些信息内容,我想应该也可以当做一个小交互,目的在于省掉每次都要改 yaml 或是修改文本的麻烦;目前我用了一套笨拙的公式,实现了非常基础的效果(也是想方便表述我的需求)

  2. 我是用了待办事项去呈现「多种状态的勾选」,通过引入 page 中的 task. completed 元素,得出一连串有序的 true 或者 false,再将它们转换为字符串,然后再嵌套 startswith 公式去判断这串字符串正确与否,最后输出结果(其实是用 excel 函数的土思路),但这种办法太有限了,毕竟只是 true 和 false 两种判断结果,如果实现多个选项,就应付不来了。

  3. 以下是我目前的公式,但我想应该有更好更聪明的表达方式,想寻求大家的意见。

table
file.etags as Tag, 
date as Date, 
choice(startswith(join(file.tasks.completed), "false, false"),"On table", "Archive") as Status
from "test file/data"
sort date desc

对应新案

  1. 重调整公式,我发现完全可以用 Excel 的思维去书写,可以实现非常简单的「点选」交互,简之就是在文档中加入代办事项,再把这些待办事项勾选与否的结果,对应 dataview 表格中的一处或者多处值,让这些值跟随勾选情况而产生变化,以下是一些简单步骤和动图演示:


动图链接:https://img.doaa.run/i/2022/06/10/llrgkw.gif

  1. 首先检索出这一份文档中的「待办」的完成结果:this.file.tasks.completed

  2. 定位具体行「待办」单独输出完成结果,例如此处定位到第一行「待办」:this.file.tasks.completed[0]

  3. 利用 choice 函数对这一行「代办」的完成结果进行判断,例如此处第一行「代办」的完成结果是 true 则输出字符串“On table”,否则为 “Unknown”:choice(this.file.tasks.completed[0]=true,"On table","Unknown")

  4. 再将 choice 函数进行嵌套使用,这里就跟 Excel 里面的 if 用法一样,例如当我勾选 「代办」Available 则输出“On table”,当我勾选 Completed 或者 Dropped 时则都输出 “Out of table”,如果都不满足,则输出“Unknown”,按照现在情况:
    choice(this.file.tasks.completed[2]=true, "Out of table",choice(this.file.tasks.completed[1]=true, "Out of table",choice(this.file.tasks.completed[0]=true, "On table","Unknown")))

  5. 最终公式内容如下:

table
file.etags as Tags,
schedule as Schedule,
choice(file.tasks.completed[2]=true, "Out of table",choice(file.tasks.completed[1]=true, "Out of table",choice(file.tasks.completed[0]=true, "On table","Unknown"))) as Status
from "test file/data"

Love OB!!

1 个赞

用这个方法做更好,可以直接在外面就更改很多。

感谢回复,已阅读,有帮助 :pray:

在群友帮助下,发现搭配插件 hover editor 让链接呼出的面板保持悬停,整个体验好非常多