笔记与数据库
插件的核心能力之一是对笔记与笔记本进行读写。通过 Database.sharedInstance() 获取数据库单例;修改笔记或笔记本数据时,应使用 UndoManager 的 undoGrouping 包裹,以支持撤销并在执行后刷新界面。
获取数据库与笔记
Section titled “获取数据库与笔记”var db = Database.sharedInstance();var note = db.getNoteById("某个笔记 ID");var notebook = db.getNotebookById("某个笔记本 ID");var doc = db.getDocumentById("某个文档 MD5");getNoteById(noteId):返回MbBookNote或 undefined。getNotebookById(topicId):返回MbTopic或 undefined。getDocumentById(docMd5):返回MbBook或 undefined。
获取列表:
var allNotebooks = db.allNotebooks();var allDocuments = db.allDocuments();修改笔记与 Undo
Section titled “修改笔记与 Undo”修改笔记属性(如 noteTitle、excerptText、colorIndex)后,应放在 UndoManager 的 undoGrouping 中执行,并传入当前笔记本 ID(可从 note.notebookId 取)。这样用户可撤销,且界面会正确刷新。
var noteId = "要修改的笔记 ID";var note = Database.sharedInstance().getNoteById(noteId);if (note) { var topicid = note.notebookId; UndoManager.sharedInstance().undoGrouping( "修改笔记标题", topicid, function () { note.noteTitle = "新标题"; } ); Application.sharedInstance().refreshAfterDBChanged(topicid);}若使用 TypeScript 与 marginnote 包,可能会封装为 undoGroupingWithRefresh 之类的单次调用;在纯 JS 下按上面方式先 undoGrouping 再 refreshAfterDBChanged 即可。
使用 MbBookNote.createWithTitle(title, notebook, document) 在指定笔记本和文档下创建一条新笔记(notebook 为 MbTopic,document 为 MbBook)。创建后同样建议放在 undoGrouping 中并刷新。
Database.sharedInstance().deleteBookNote(noteId):只删除该条笔记,不删子节点。Database.sharedInstance().deleteBookNoteTree(noteId):删除该笔记及其所有后代。
删除后也应调用 Application.sharedInstance().refreshAfterDBChanged(topicid) 刷新对应笔记本界面。
示例:根据 noteId 修改标题并刷新
Section titled “示例:根据 noteId 修改标题并刷新”var noteId = "A_VALID_NOTE_ID";var note = Database.sharedInstance().getNoteById(noteId);if (note) { var topicid = note.notebookId; UndoManager.sharedInstance().undoGrouping( "修改标题", topicid, function () { note.noteTitle = "由插件修改后的标题"; } ); Application.sharedInstance().refreshAfterDBChanged(topicid);}