如图,比如把图片中任务项添加到数据库中,希望能用模版列获取到任务状态,显示完成/未完成,这样就可以不用勾选框了,直接用笔记内的勾选框即可进行筛选,求大佬们帮忙写个,谢谢。
相关帖子
-
-
JeffreyChen • • 2 评论
你的意思是数据库绑定的是列表项吗?
对滴,绑定是列表项目,不绑定整个列表5kyfkr •Issue #12988 · siyuan-note/siyuan 我一开始想着是让 D 大整的,D 大不整就只剩下模版列能实现了5kyfkr • -
试试这个:
.action{ if index . "custom-avs" } .action{ $id := .id } .action{ $done := len (queryBlocks "SELECT * FROM blocks WHERE id = '?' AND markdown LIKE '* [x]%'" $id) } .action{ if eq $done 1 } 已完成 .action{ else } 未完成 .action{ end } .action{ end }
1 回复 -
要是能给纯文本主键做个点击框,然后点击后输出已完成,那就完美了
确实可以,但点击框加到模板列更方便,代码如下
.action{ if index . "custom-avs" } .action{ $id := .id } .action{ $done := len (queryBlocks "SELECT * FROM blocks WHERE id = '?' AND markdown LIKE '* [x]%'" $id) } <label onclick="event.stopPropagation();if(event.target.tagName!=='INPUT')return;(document.querySelector('[data-type=\'NodeListItem\'][data-node-id=\'.action{ .id }\']')||document.querySelector('[data-type=\'NodeList\'][data-node-id=\'.action{ .id }\']'))?.querySelector('.protyle-action--task')?.click();if(this.lastElementChild.checked)this.firstElementChild.textContent='已'+'完成';else this.firstElementChild.textContent='未'+'完成';"> .action{ if eq $done 1 } <span>已完成</span> .action{ else } <span>未完成</span> .action{ end } <input type="checkbox" .action{ if eq $done 1 } checked .action{ end } style="position:relative;top:-2px;" /> </label> .action{ end }
效果
但这种效果,如果任务项文档未打开会没效果,这时需要调用思源 api 接口进行更新,这种实现方式太过麻烦,有兴趣自己研究。
另外,如果让任务项点击,数据库完成状态实时更新实现起来也较麻烦,暂不支持。目前任务项点击,需要刷新页面,数据库完成状态才更新。
2 回复下个版本会改进数据库刷新 Issue #12997 · siyuan-note/siyuan -
-
-
JeffreyChen • • 1 评论
对,我的意思就是你没有实现这个。
p.s. 我感觉你是不是把“给纯文本主键(条目)做个点击框”理解成了“给主键(单元格)做个点击框”。楼主遇到的问题是,没有绑定块的条目无法通过模板来表示已完成,你的模板代码还是没有解决这一点。
你理解没错误,我是这么理解的,不过,纯文本要调用 api 就复杂了wilsons • -
JeffreyChen • • 1 赞同 • 1 评论
不过对纯文本主键就没什么好办法了
严格来说也不算没办法,给数据库多加一个复选框字段给纯文本主键条目用就行了。
想了想还是觉得没必要,纯文本不整也够用了5kyfkr •