原问题和需求
-
个人想用 table 表格的形式做任务管理,同时想实现「多种状态的勾选」,就一个小小的点选交互,因为我发现鼠标移动到链接上时,弹出的面板能承载一些信息内容,我想应该也可以当做一个小交互,目的在于省掉每次都要改 yaml 或是修改文本的麻烦;目前我用了一套笨拙的公式,实现了非常基础的效果(也是想方便表述我的需求)
-
我是用了待办事项去呈现「多种状态的勾选」,通过引入 page 中的 task. completed 元素,得出一连串有序的 true 或者 false,再将它们转换为字符串,然后再嵌套 startswith 公式去判断这串字符串正确与否,最后输出结果(其实是用 excel 函数的土思路),但这种办法太有限了,毕竟只是 true 和 false 两种判断结果,如果实现多个选项,就应付不来了。
-
以下是我目前的公式,但我想应该有更好更聪明的表达方式,想寻求大家的意见。
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
对应新案
- 重调整公式,我发现完全可以用 Excel 的思维去书写,可以实现非常简单的「点选」交互,简之就是在文档中加入代办事项,再把这些待办事项勾选与否的结果,对应 dataview 表格中的一处或者多处值,让这些值跟随勾选情况而产生变化,以下是一些简单步骤和动图演示:
动图链接:https://img.doaa.run/i/2022/06/10/llrgkw.gif
-
首先检索出这一份文档中的「待办」的完成结果:
this.file.tasks.completed
-
定位具体行「待办」单独输出完成结果,例如此处定位到第一行「待办」:
this.file.tasks.completed[0]
-
利用
choice
函数对这一行「代办」的完成结果进行判断,例如此处第一行「代办」的完成结果是true
则输出字符串“On table”,否则为 “Unknown”:choice(this.file.tasks.completed[0]=true,"On table","Unknown")
-
再将
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")))
-
最终公式内容如下:
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!!