# 學習歷程記錄器_Part 4: Markdown 編輯器的嵌入 時長: 30 min+30 min實作時間 ## 這麼做有甚麼好處? - 讓使用者可以即時編輯內容 - 使用者可以用通用的markdown語言書寫筆記 [Markdown語言使用說明](https://experienceleague.adobe.com/zh-hant/docs/contributor/contributor-guide/writing-essentials/markdown) ## 範例code 放置Markdown 編輯器的地方 ``` <!-- Markdown Editor --> <form id="markdown-form" method="POST"> <textarea id="markdown-editor" name="markdownContent"></textarea> <input type="hidden" id="topicName" name="topicName" value="{{ topic.topicName }}"> </form> <!-- End of Markdown Editor --> ``` 讓編輯器可以運行 ``` <script type="text/javascript"> // 初始化 SimpleMDE 编辑器 var simplemde = new SimpleMDE({ element: document.getElementById("markdown-editor") }); // 点击保存按钮时触发 $('#save-markdown-btn').click(function() { var markdownContent = simplemde.value(); // 获取 Markdown 内容 var topicName = $('#topicName').val(); // 获取主题名称 // 弹出确认窗口 if (confirm("保存學習記錄囉!")) { // 发送数据到后端 $.ajax({ url: '/save_markdown', type: 'POST', contentType: 'application/json', data: JSON.stringify({ markdownContent: markdownContent, topicName: topicName }), success: function(response) { console.log('Markdown content saved successfully'); // 处理成功响应 }, error: function(xhr, status, error) { console.error('Error saving Markdown content:', error); // 处理错误响应 } }); } }); $(document).ready(function() { // 发送请求获取上次保存的 Markdown 内容 $.ajax({ url: '/get_markdown/{{ topic.topicName }}', // 替换为正确的路由,包含主题名称 type: 'GET', success: function(response) { var lastMarkdownContent = response.markdownContent; // 将获取到的 Markdown 内容填充到 Markdown 编辑器中 simplemde.value(lastMarkdownContent); }, error: function(xhr, status, error) { console.error('Error fetching last Markdown content:', error); } }); }); </script> ``` app.py 使編輯器可以寫入資料與儲存資料 ``` @app.route('/save_markdown', methods=['POST']) def save_markdown(): # 获取来自前端的 JSON 数据,包含 Markdown 内容和主题名称 request_data = request.json # 加载原始数据 with open('learning.json', 'r') as file: data = json.load(file) # 根据主题名称找到相应的主题对象,并将 Markdown 内容添加到其中 for record in data['learning_records']: if record.get('topicName') == request_data.get('topicName'): record['markdownContent'] = request_data.get('markdownContent', '') break # 将更新后的数据写回到 JSON 文件中 with open('learning.json', 'w') as file: json.dump(data, file, indent=4) # 响应成功消息 return jsonify({'message': 'Markdown content saved successfully'}) @app.route('/get_markdown/<topic_name>') def get_markdown(topic_name): # 加载 learning.json 文件中的内容 with open('learning.json', 'r') as file: data = json.load(file) # 根据主题名称找到相应的主题对象,并返回 Markdown 内容 for record in data['learning_records']: if record.get('topicName') == topic_name: markdown_content = record.get('markdownContent', '') break # 返回获取到的 Markdown 内容 return jsonify({'markdownContent': markdown_content}) ``` :::info 💡實作時間: 1. 把你的網頁加上markdown編輯器 2. 確定可以把編輯器中的內容寫入資料庫中 :::