## 通過控制臺輸出報文
通過課件編輯軟件,菜單中的項目保存,正常保存之后,你可以得到保存信息的相關報文,在報文的**最后一行**可以得到課件目錄。
```
/Users/robin/Library/Application Support/courseware-eeditor/tmp/668f1e76-099e-407a-a7cf-7b20a650e5e2/save
....
/Users/robin/Library/Application Support/courseware-eeditor/LookThisDir
```
## 通過項目目錄
課件編輯器中的預覽以及保存操作都會保存課件資源,對應的文件為/egret/src/workspace/PageBar.ts.
其中項目保存方法:onProjectSave,項目預覽的方法:onPreviewProject,都會調用保存序列化對象的方法:saveSerializedSubjects。
具體方法內容:
1. 清空文件夾
2. 遍歷頁面列表,進行信息獲取
3. 生成xml文檔
4. 提示保存成功
## ipc.projecct的抽象定義
在方法內部有個ipc,具有的屬性如下:基本為引入的libs中的模塊屬性,在project中定義了項目需要的方法。

## ipc.project ,
路徑:egret/libs/ipc/project.d.ts
定義內容
```
declare namespace ipc.project {
function saveProjectDialog(cb: Function, thisObj: any): void;
function clearTempDir(cb: Function, thisObj: any): void;
function saveXml(xmlString: string, jsonString: string, cb: Function, thisObj: any): void;
function copyFiles(fileList: Array<ResourceItem>, cb: Function, thisObj: any): void;
function upload(projectInfo: any, cb: Function, thisObj: any): void;
function download(projectInfo: any, cb: Function, thisObj: any): void;
function unzip(projectInfo: any, cb: Function, thisObj: any): void;
}
```
## 判斷題的元素從哪里來?
路徑:Subject.Template.ABChoice
調用轉換方法之前獲取的,judgementSubject.ts在調用方法時傳入了全量的判斷題數據。
中判斷題全部相關的內容,其中比較關鍵的有_serializationElements,序列化的元素,以及subjectname:judgment-1.
在構造器中初始化大量的判斷題的模板數據,添加到畫布中,并在最后,歸納到_serializationElements中。
## xml轉換之前,拿到的是所有的元素的對象集合

在文件中,/src/subject/template/judgementHelper 的 serializationXML方法,其中是判斷題需要的所有的字段信息,內部是對象的各種屬性都有的,實際只需要保存下類型和地址信息即可,用getResources方法。解析得到的結果如圖:

因為屬性不正確,所以根據正確的key進行重新賦值一遍對所有資源,得到resource的列表
而各個判斷題的基本對象的屬性,進行一次過濾,其中每個對象都具有自己的屬性過濾方法,拿到屬性后全量配置到scence中,根據每個對象的值,尤其是資源配置,從資源map中取值。(這個方法中可以看到大量的配置屬性都是固定值,而非用戶設置值)。
而actions默認是空的,返回空即可。
## 經過xml轉化之后,配置信息變為

也就是xml需要的節點信息的前身,
```
// 初始化需要變量
let attribute = [], resources = [], scenes = [], actions = [];
// 拼接json的節點信息
let root = {
root: {
attribute,
resources,
scenes,
actions
}
}
// 保存文件 利用json2xml模塊
const json2xml = $require('json2xml');
const xml = json2xml(root, { attributes_key: '$', header: true });
```
- 相關資源鏈接
- 米樂星球小程序內調研
- 項目結構說明
- 交互課件說明
- server項目說明
- 項目說明
- 項目啟動
- app.js做的事情
- 獲取互動課件的地址
- 分析互動課件地址的參數
- policy目錄--lesson.js
- 解析ppt--api/lesson.js
- 信令中的key:template
- 信令中的key:media
- kk-talkee-engine.js
- Message
- 課件模板頁的識別過程
- 解析課件模板的源文件
- 場景與模板的對應關系
- 所有場景的基類
- choiceScence為例
- 注意事項
- ws
- online項目的說明
- online消息
- 課件編輯項目
- 資源鏈接
- 基本項目信息
- electron項目結構分析
- ipc
- 模板題組
- 普通題組
- 游戲題組
- 課件導出內容分析
- 課件模板分類明細
- 圖片題
- 視頻題
- 音頻題
- 選擇題
- 判斷題
- 轉盤
- 篩子
- 圖層拖拽
- 動畫題
- 翻拍題
- 語音題
- 201908變更
- 課件制作流程分析
- 菜單配置
- 入口操作
- 定義模板布局與初始化
- 選擇素材
- 導出過程
- egret
- interface
- ad選擇器模板
- ab選擇器模板
- 圖層拖拽模板
- 判斷題模板
- xml
- 轉盤
- events
- components
- 父類組件
- 基本組件
- 判斷題組件
- 龍骨動畫調研
- 基本了解
- 產品原型
- 白板Client項目
- 消息類型
- 白板項目分析
- 入口