dataviewjs 写了一个待办事项,来返回不同的结果
待办事项被勾选,然后点一次双链接,在回来,就又变成没有勾选了
请问 obsidian 是有可能写出具有保存记忆功能的动态js的能力吗?
用deepseek写了好几次都是失败的
用属性的方法可以保存
const container = dv.el("div", "");
// 从当前文件的frontmatter获取状态,如果没有则默认为2
const currentStatus = dv.current().status || 2;
const isChecked = currentStatus === 1; // 1=选中,2=未选中
// 创建复选框
const checkbox = dv.el("input", "", {
type: "checkbox",
checked: isChecked // 确保初始状态正确
});
// 创建状态显示
const statusSpan = dv.el("span", currentStatus.toString(), {
style: "margin-left: 5px;"
});
// 添加事件监听器
checkbox.addEventListener("change", async function() {
const newStatus = this.checked ? 1 : 2;
statusSpan.textContent = newStatus.toString();
// 更新frontmatter
const file = app.workspace.getActiveFile();
await app.fileManager.processFrontMatter(file, fm => {
fm.status = newStatus;
});
});
// 将元素添加到容器
container.appendChild(checkbox);
container.appendChild(statusSpan);
// 强制更新复选框状态(解决Obsidian渲染问题)
setTimeout(() => {
checkbox.checked = isChecked;
}, 100);
不太懂,你的意思是dataview渲染的查询结果,其任务的状态修改可以反馈到实际的文本么?