blockly二次開發(fā)中文文檔——3.3添加自定義塊

添加自定義塊

雖然Blockly定義了許多標準塊镀脂,但大多數(shù)應用程序需要定義和實現(xiàn)至少一些域相關(guān)塊朽缎。

塊由三個部分組成:

  • 塊定義對象:定義塊的外觀和行為沃缘,包括文本,顏色鞭达,字段和連接司忱。
  • 工具箱參考:工具箱XML中對塊類型的引用皇忿,因此用戶可以將其添加到工作區(qū)。
  • 生成器函數(shù):生成此塊的代碼字符串坦仍。它是用JavaScript編寫的鳍烁,即使目標語言不是JavaScript,甚至是用于Android端的Blockly繁扎。

塊定義

用于Web加載的Blockly通過腳本文件加載塊幔荒。在“blocks/”目錄中包含幾個標準塊的示例。假設您的塊不適合現(xiàn)有類別梳玫,請創(chuàng)建一個新的JavaScript文件爹梁。這個新的JavaScript文件需要包含在編輯器HTML文件的<script ...>標簽列表中。

注意:大多數(shù)塊都可以使用Blockly Developer Tools定義提澎,而不是手動創(chuàng)建下面的代碼姚垃。

典型的塊定義如下所示:

Json語言版本:

Blockly.Blocks['string_length'] = {
  init: function() {
    this.jsonInit({
      "message0": 'length of %1',
      "args0": [
        {
          "type": "input_value",
          "name": "VALUE",
          "check": "String"
        }
      ],
      "output": "Number",
      "colour": 160,
      "tooltip": "Returns number of letters in the provided text.",
      "helpUrl": "http://www.w3schools.com/jsref/jsref_length_string.asp"
    });
  }
};

JavaScript語言版本:

Blockly.Blocks['string_length'] = {
  init: function() {
    this.appendValueInput('VALUE')
        .setCheck('String')
        .appendField('length of');
    this.setOutput(true, 'Number');
    this.setColour(160);
    this.setTooltip('Returns number of letters in the provided text.');
    this.setHelpUrl('http://www.w3schools.com/jsref/jsref_length_string.asp');
  }
};
  • string_length:這是塊的類型名稱。由于所有塊共享相同的命名空間盼忌,因此最好使用由您的類別(在本例中為字符串)組成的名稱积糯,后跟您的塊函數(shù)(在本例中為length)。
  • init:此函數(shù)定義塊的外觀谦纱。

這定義了以下塊:


text-length.png

塊定義的詳細信息可以《塊的定義》中找到看成。

添加工具箱的方法,僅供參考

定義后跨嘉,使用類型名稱將塊引用到工具箱:

<xml id="toolbox" style="display: none">
  <category name="Text">
    <block type="string_length"></block>
  </category>
  ...
</xml>

在《工具箱》中可以看到更多細節(jié)川慌。

添加生成器功能

最后,要將塊轉(zhuǎn)換為代碼偿荷,請將塊與生成器函數(shù)配對窘游。生成器特定于所需的輸出語言,但標準生成器通常采用以下格式:

Blockly.JavaScript['text_length'] = function(block) {
  // String or array length.
  var argument0 = Blockly.JavaScript.valueToCode(block, 'VALUE',
      Blockly.JavaScript.ORDER_FUNCTION_CALL) || '\'\'';
  return [argument0 + '.length', Blockly.JavaScript.ORDER_MEMBER];
};

生成器函數(shù)引用塊進行處理跳纳。它將輸入(上面的VALUE輸入)呈現(xiàn)為代碼字符串,然后將它們連接成更大的表達式贪嫂。

有關(guān)詳細信息寺庄,請參閱《使用自定義生成器》。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末力崇,一起剝皮案震驚了整個濱河市斗塘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌亮靴,老刑警劉巖馍盟,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異茧吊,居然都是意外死亡贞岭,警方通過查閱死者的電腦和手機八毯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瞄桨,“玉大人话速,你說我怎么就攤上這事⌒窘模” “怎么了泊交?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長柱查。 經(jīng)常有香客問我廓俭,道長,這世上最難降的妖魔是什么唉工? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任白指,我火速辦了婚禮,結(jié)果婚禮上酵紫,老公的妹妹穿的比我還像新娘告嘲。我一直安慰自己,他們只是感情好奖地,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布橄唬。 她就那樣靜靜地躺著,像睡著了一般参歹。 火紅的嫁衣襯著肌膚如雪仰楚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天犬庇,我揣著相機與錄音僧界,去河邊找鬼。 笑死臭挽,一個胖子當著我的面吹牛捂襟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播欢峰,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼葬荷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了纽帖?” 一聲冷哼從身側(cè)響起宠漩,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎懊直,沒想到半個月后扒吁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡室囊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年雕崩,在試婚紗的時候發(fā)現(xiàn)自己被綠了魁索。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡晨逝,死狀恐怖蛾默,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情捉貌,我是刑警寧澤支鸡,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站趁窃,受9級特大地震影響牧挣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜醒陆,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一瀑构、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧刨摩,春花似錦寺晌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至罢浇,卻和暖如春陆赋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嚷闭。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工攒岛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胞锰。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓灾锯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親胜蛉。 傳聞我的和親對象是個殘疾皇子挠进,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容