运行逻辑整理
项目入口主要功能包装(高阶组件) src/containers/gui.jsx
const WrappedGui = compose(
LocalizationHOC, // 提供 “本地化” 功能
ErrorBoundaryHOC('Top Level App'),
FontLoaderHOC,
QueryParserHOC, // 提供 “提示查询” 功能(src/lib/query-parser-hoc.jsx)
ProjectFetcherHOC, // 提供 “获取项目” 功能(src/lib/project-fetcher-hoc.jsx)
TitledHOC,
ProjectSaverHOC, // 提供 “保存项目” 功能(src/lib/project-saver-hoc.jsx)
vmListenerHOC,
vmManagerHOC,
SBFileUploaderHOC, // 提供 “上传文件” 功能(src/lib/sb-file-uploader-hoc.jsx)
cloudManagerHOC // 提供 “云管理” 功能
)(ConnectedGUI);
WrappedGui.setAppElement = ReactModal.setAppElement;
export default WrappedGui;
高阶组件
“本地化”
LocalizationHOC: 监听onSetLanguage事件修改state.locales状态切换语言“提示查询”
QueryParserHOC: 通过onOpenTipsLibrary调用state.openTipsLibrary更新状态,以供src/components/menu-bar/menu-bar.jsx点击事件调用“获取项目”
ProjectFetcherHOC: 设置 资源主机、项目主机 通过fetchProject调用storage.load加载项目-
“保存项目”
ProjectSaverHOC:-
componentWillMount添加 离开页面 监听器window.onbeforeunload = e => this.leavePageConfirm(e); -
updateProjectToStorage调用this.storeProject更新项目到storage -
createNewProjectToStorage调用this.storeProject创建项目到storage -
createCopyToStorage调用this.storeProject复制项目到storage -
createRemixToStorage调用this.storeProject重制项目到storage -
storeProject调用this.storeProjectThumbnail存储项目到storage -
storeProjectThumbnail调用this.getProjectThumbnail设置项目快照 -
getProjectThumbnail获取项目快照
-
-
“上传文件”
SBFileUploaderHOC: 添加onStartSelectingFileUpload文件上传逻辑,并添加回调点以供src/components/menu-bar/menu-bar.jsx点击事件调用,步骤如下-
handleStartSelectingFileUpload预处理 可能会有其他逻辑 -
createFileObjects清理内存后上传sb3文件,并监听文件读取事件onload -
handleChange选择文件后弹框确认,同意后进入下一步,不同意清理内存后关闭 “文件选择框” -
requestProjectUpload修改state.scratchGui.projectState.loadingState项目状态为 “uploading” -
handleFinishedLoadingUpload读取文件内容 (文件上传后触发组件componentDidUpdate事件时调用此方法) -
onload通过dispatch(openLoadingProject())打开 “加载提示” 模态框,并调用state.scratchGui.vm.loadProject开始加载项目,然后调用dispatch(setProjectTitle(title))设置项目名称,最后改变state.scratchGui.projectState关闭模态框。 -
removeFileObjects清理内存(开始、完成、失败时都执行清理工作)
-