scratch3.0二开替换默认角色修改默认项目名称
修改默认角色,这里有个比较便捷的方式,但不是很规范。
首先找到project-fetcher-hoc.jsx这个高阶组件,
默认项目在这里创建的
componentDidUpdate (prevProps) {if (prevProps.projectHost !== this.props.projectHost) {storage.setProjectHost(this.props.projectHost);}if (prevProps.assetHost !== this.props.assetHost) {storage.setAssetHost(this.props.assetHost);}if (this.props.isFetchingWithId && !prevProps.isFetchingWithId) {this.fetchProject(this.props.reduxProjectId, this.props.loadingState);}if (this.props.isShowingProject && !prevProps.isShowingProject) {this.props.onProjectUnchanged();}if (this.props.isShowingProject && (prevProps.isLoadingProject || prevProps.isCreatingNew)) {this.props.onActivateTab(BLOCKS_TAB_INDEX);}}
可以在这里嵌入一个全局配置,让它优先加载我们的全局默认项目,默认项目可以放到
static目录下;
componentDidUpdate (prevProps) {if (prevProps.projectHost !== this.props.projectHost) {storage.setProjectHost(this.props.projectHost);}if (prevProps.assetHost !== this.props.assetHost) {storage.setAssetHost(this.props.assetHost);}if (this.props.isFetchingWithId && !prevProps.isFetchingWithId) {if ('defaultProjectURL' in window.scratchConfig) {const that = this;fetch(window.scratchConfig.defaultProjectURL).then(r => r.blob()).then(blob => {const reader = new FileReader();reader.onload = () => {that.props.onFetchedProjectData(reader.result, that.props.loadingState);};reader.readAsArrayBuffer(blob);});} else {this.fetchProject(this.props.reduxProjectId, this.props.loadingState);}}if (this.props.isShowingProject && !prevProps.isShowingProject) {this.props.onProjectUnchanged();}if (this.props.isShowingProject && (prevProps.isLoadingProject || prevProps.isCreatingNew)) {this.props.onActivateTab(BLOCKS_TAB_INDEX);}}
升级后的代码,如果存在默认项目配置,系统会自动优先加载你定义的默认项目,这时候我们可以直接采取任意方式编程,创建一个含默认角色的项目,丢到static目录下就可以了。
但是,项目名称,确无法读取默认项目中的名称,还需要做个强制替换:
可以找到gui.jsx文件的下面方法,做个扩展点,来强制修改项目名称:
componentDidUpdate (prevProps) {if (this.props.projectId !== prevProps.projectId && this.props.projectId !== null) {this.props.onUpdateProjectId(this.props.projectId);}if (this.props.isShowingProject && !prevProps.isShowingProject) {// this only notifies container when a project changes from not yet loaded to loaded// At this time the project view in www doesn't need to know when a project is unloadedthis.props.onProjectLoaded();}}
修改后:
componentDidUpdate (prevProps) {if (this.props.projectId !== prevProps.projectId && this.props.projectId !== null) {this.props.onUpdateProjectId(this.props.projectId);}if (this.props.isShowingProject && !prevProps.isShowingProject) {// this only notifies container when a project changes from not yet loaded to loaded// At this time the project view in www doesn't need to know when a project is unloadedthis.props.onProjectLoaded();if (window.scratchConfig && 'handleProjectLoaded' in window.scratchConfig) {window.scratchConfig.handleProjectLoaded();}if (!this.isDefaultProjectLoaded) {this.isDefaultProjectLoaded = true;if (window.scratchConfig && 'handleDefaultProjectLoaded' in window.scratchConfig) {window.scratchConfig.handleDefaultProjectLoaded();}}}}
扩展函数,修改scratch3.0默认项目名称:
//默认作品加载完毕handleDefaultProjectLoaded: () => {setTimeout(() => {if (window.scratch) {/*** 设置默认加载项目的名称*/window.scratch.setProjectName("柿子编程作品")console.log('默认作品加载完毕 handleDefaultProjectLoaded');} else {handleDefaultProjectLoaded();console.log('默认作品加载 等待重置默认作品名称 handleDefaultProjectLoaded');}}, 2)}
到这里,项目名称也终于修改好了!
scratch3.0二开替换默认角色修改默认项目名称相关推荐
- scratch3.0 二次开发-基本介绍(第一章)
scratch3.0系列章节列表 scratch3.0 二次开发-基本介绍(第一章) scratch3.0二次开发运行scratch-gui项目并了解工程结构(第二章) scratch3.0二次自定义 ...
- wdcp 如何创建用IP就可以访问的默认站点/修改默认站点
如何创建用IP就可以访问的默认站点/修改默认站点 关键词 1 创建默认站点 2 修改默认站点 3 创建使用IP访问的站点 在wdcp2.2版开始,可以直接在后台里创建默认站点了,也就是可以直接用IP来 ...
- 修改react-native项目名称
修改react-native项目名称 摘要:每次创建react-native项目的时候都会重新执行init,感觉很耗时,想在现有项目基础上复制一份进行修改.本文主要是修改IOS部分,Android部分 ...
- Scratch3.0 二次开发(3)修改菜单栏
目录 需求 动手吧 删除[语言切换].[教程].即将启用等菜单 修改菜单文字 修改[默认项目名称] 书接上文,继续修改菜单栏 需求 删除不必要的菜单项(如:语言切换.教程.即将启用的无效菜单) 修改菜 ...
- Scratch3.0 二次开发环境部署(一)
简介 Scratch终于在2019年1月2日,发布了3.0正式版. 我们先来看下Scratch3.0改进了什么. 首先要说明的是,3.0完全兼容2.0的作品,所有用2.0制作的作品,都可以在3.0中打 ...
- scratch3.0键盘无法输入文字或修改指令中的数字的快速解决办法
scratch3.0在使用过程中突然无法输入文字,或者修改指令中的数字?这该怎么办呢? 1.点击Scratch3窗口右上角的最小化按钮,将窗口最小化 2.在任务栏点击scratch3.0,还原刚才的窗 ...
- Android 9.0 禁用屏幕锁屏和修改默认输入法为谷歌输入法功能实现
目录 1.概述 2.禁用屏幕锁屏和修改默认输入法为谷歌输入法功能实现的核心类
- myeclipse如何修改Web项目名称
打比方,比如复制一个现有的项目,重命名项目名称,这里举例名称重新命名为"劳黑炭" 要清楚的是,这里的项目名称重新命名了,但是Web项目本质下的名称还是没有改变的.所以需要更改,更改 ...
- 使用MyEclipse修改web项目名称
有时候再做一个web应用项目时,由于别的原因想换个项目名称,如是乎直接在项目目录上面右击Refactor-->Rename,貌似修改成功了,可当将web应用发布到tomcat上面时,再怎么访问都 ...
最新文章
- 旗帜鲜明的反对李彦宏当选院士!
- java 解析ppt动画_姜子牙口碑崩盘?我们为它做了这份炸裂的PPT!(领取源文件)...
- 错误:ORA-28002: the password will expire within 7 da
- Android开发学习笔记-自定义组合控件
- NYOJ 1023 还是回文(DP,花最少费用形成回文串)
- SharePoint2010 连接配置数据库字符串保存位置(转)
- Flex in a Week video training
- 互联网公司端午节礼盒歧视指南
- 【转】字符串和浮点数格式化输出小结
- android实现应用程序仅仅有在第一次启动时显示引导界面
- 计算机毕业设计之答辩
- 微信与企业微信消息如何互通?
- 哲学家是如何思考问题的-2.0版
- linux 移除用户所在的组,Linux用户及用户组添加和删除操作
- 网络舆情源头管理方案
- Vuforia 虚拟按钮(Unity 2020)
- 让文化与大数据 离婚吧
- autojs学习笔记
- nginx配置 外网参考
- 白话数字化-1:什么是数字化?
热门文章
- 2023年湖北建筑七大员八大员怎么查询?查询入口是哪里?
- java实现在tcp协议下进行数据的传输
- java生成pdf电子书_java itext导出PDF功能实现
- STM32 GPIO 引脚中断号重复问题的分析
- 服饰商标的分类是什么?
- 你那点小心思,微信都懂
- Failed to transform artifact ‘support-v4.aar (com.android.support:support-v4:22.0.0)‘ to match attri
- SegmentFault 巨献 1024 程序员游戏「红岸的呼唤」
- springboot+vue 分布式项目奶茶店
- Linux 新手必知必会的 10 条 Linux 基本命令