作者:中子星000

让我们在JavaScript的大海中遨游吧!(本次航行没有包含自定义控件全部内容,只讲了不可见控件,和方法积木的定义以及控件实体)

启航之前

一 目标

遨游大海,必然要有一艘可靠的船,一个坚定的目标和一位可靠的船长,

  • 一艘可靠的船:即你接下来要做的自定义控件
  • 一个坚定的目标:即你的自定义控件的功能
  • 一位可靠的船长:即

需求推动发展,那我们必须得先制定一个目标,才能打造一艘优秀的船。这次航行我们有这几个目标,

  • 好好的宣传这次航行,把公告的标题(假设为英文)转换成大写。即把字符串中英文字母全转换成大写
  • 把一位粗心船员写的大小写混乱的句子转换成小写(假设必须要这么做)。即把字符串中英文字母全转换成小写
  • 另一位船员想找找目标中第一个“船员”在哪?。即搜索字符串中第一个子字符串的下标

好了,目标指定完了,开始造船吧!

二 造船

造船肯定不能两手空空,还得有材料,

  • 一些造船的基本知识,即一些编程的基本知识
  • 一个好用的车间,即代码编辑器

    1 船的框架

    造东西可以先造出框架,再填充内容,那我们这次造船也这样
    首先必须得创建一个文件叫做字符串工具.js(后缀名不会改的百度搜索后缀名怎么改
    一艘船,当然得有属于他的基本信息,描述清楚他有什么功能,不然别人怎么知道这是什么呢,往文件里放入这个框架吧

    1. const types = { // 这就是你的船了,包含了你的船的信息,即一个自定义控件类型
    2. type: 'STRING_TOOLS_WIDGET', // 当作是船的型号,最好使用全英文大写,下划线连接
    3. title: '字符串工具', // 当作是船的名字
    4. icon: 'https://creation.codemao.cn/716/appcraft/IMAGE_bZbAOhRcTa_1643095470593.svg', // 一艘船得有一个好看的图标作为标识,一般用.svg的图片
    5. isInvisibleWidget: true, // (实在想不到什么比喻了)用于决定这个控件是否不可见,这个教程只教不可见控件,想要了解可见控件参考其他教程
    6. isGlobalWidget: true, // (实在想不到什么比喻了)用于决定这个控件是否全局
    7. properties: [], // 你的船会有一些独特的属性在这里定义,控件的属性列表,本教程中未使用,但也得写上
    8. methods: [ // 你的船能做什么就看它了,控件的方法列表
    9. { // 每一个方法都由类似这样的一段大括号里面的内容定义
    10. key: 'toUpperCase', // 这个方法的名字,会在下面用到
    11. valueType: 'string', // 我们进行完转换后返回转换后的字符串
    12. params: [ // 进行一些操作,经常是给方法一些参数的
    13. {
    14. key: 'text', // 参数名,要和下面对应
    15. label: '把', // 更好的衔接积木,增加可读性
    16. labelAfter: '转换成大写', // 更好的衔接积木,增加可读性
    17. valueType: 'string', // 我们要输入一个字符串进行转换大写
    18. defaultValue: 'Hello world!', // 积木里默认的值
    19. },
    20. ],
    21. tooltip: '字符串中英文字母全转换成大写', // 向使用这个控件的人描述这个方法是做什么的,怎么用的
    22. },
    23. {
    24. key: 'toLowerCase', // 这个方法的名字,会在下面用到
    25. valueType: 'string',
    26. params: [
    27. {
    28. key: 'text',
    29. label: '把',
    30. labelAfter: '转换成小写', // 更好的衔接积木,增加可读性
    31. valueType: 'string',
    32. defaultValue: 'Hello world!',
    33. },
    34. ],
    35. tooltip: '字符串中英文字母全转换成小写', // 向使用这个控件的人描述这个方法是做什么的,怎么用的
    36. },
    37. {
    38. key: 'indexOf', // 这个方法的名字,会在下面用到
    39. valueType: 'number', // 这里返回一个下标,当然是数字类型了
    40. params: [
    41. {
    42. key: 'text',
    43. label: '在',
    44. labelAfter: '中搜索第一个', // 更好的衔接积木,增加可读性
    45. valueType: 'string',
    46. defaultValue: 'Hello world!',
    47. },
    48. {
    49. key: 'searchText', // 参数名,要和下面对应
    50. valueType: 'string',
    51. defaultValue: 'o',
    52. },
    53. ],
    54. tooltip: '搜索字符串中第一个子字符串的下标', // 向使用这个控件的人描述这个方法是做什么的,怎么用的
    55. },
    56. ],
    57. events: [], // 你的船不是一帆风顺的,总是会发生一些事情,控件的事件列表,本教程中未使用,但也得写上
    58. }

    2 船的内容

    光有框架肯定不行,你得向框架里填充内容,就像这样

    1. class Widget extends InvisibleWidget { // 现在,把你船的框架填上代码吧!
    2. constructor(props) { // 这个是构造函数,必须要有的
    3. super(props); // 调用超类的构造函数,必须要有的
    4. }
    5. toUpperCase = (text) => { // 定义上面对应的方法,这里的参数要和上面对应
    6. // 这里调用了JavaScript字符串对象的原生方法
    7. return text.toUpperCase(); // 这里返回的内容数据类型要和上面对应
    8. }
    9. toLowerCase = (text) => { // 定义上面对应的方法,这里的参数要和上面对应
    10. return text.toLowerCase(); // 这里返回的内容数据类型要和上面对应
    11. }
    12. indexOf = (text, searchText) => { // 定义上面对应的方法,这里的参数要和上面对应
    13. return text.indexOf(searchText); // 这里返回的内容数据类型要和上面对应
    14. }
    15. }

    3 下海

    你的船不下海当然没法走,所以,你需要下面的代码

    1. exports.types = types;
    2. exports.widget = Widget;

    启航

    源文件:字符串工具.js

    1 一帆风顺

    在CoCo中导入你的控件并使用吧!

    2 雷雨天气

    写自定义控件总是会出现错误,那又该怎么办呢?
    你可以到CoCo交流群(QQ:861247613)中提问
    也可以自行百度(估计很难查到)
    或者根据自定义控件文档慢慢排查

    未来的航程

    分享你的控件

    在CoCo交流群(QQ:861247613)中分享你的控件吧!
    向官方投稿你的控件

    继续学习JavaScript

    以下网址会帮到你:
    https://www.javascript.com/learn(仅Javascript,英文)
    https://developer.mozilla.org/zh-CN/docs/learn/JavaScript(非常全面,有中文,推荐)
    https://www.runoob.com/js/js-tutorial.html(不是很全面,中文,推荐)

(有啥遗漏或不详细以后再补充吧)