欄位

欄位是產生程式碼的重要部分,因為欄位會定義使用者可編輯的值,例如字串、數字和顏色 (等等)。

如要在產生的程式碼中納入欄位值,必須取得欄位值,將其轉換為可用字串,然後再串連字串與程式碼的其餘部分。

import {javascriptGenerator} from 'blockly/javascript';

javascriptGenerator.forBlock['my_custom_block'] = function(block, generator) {
  // Get the field value.
  const fieldValue = block.getFieldValue('MY_FIELD');

  // Concatenate the code.
  const code = `some code ${fieldValue} some more code`;

  // Return the code.
  return code;
}

取得值

您可以使用 getFieldValue 存取欄位值。傳回的內容因欄位而異,因此建議您查看內建欄位說明文件,瞭解特定欄位的相關資訊。例如,文字輸入欄位會傳回使用者輸入的確切文字,但下拉式選單欄位會傳回與使用者所選項目相關聯的語言中立字串。

轉換值

大部分的欄位值都可以立即串連至程式碼字串。不過,部分欄位值需要額外處理才能使用。

字串

字串必須先由程式碼產生器加上引號,才能串連。

// For a single line text field.
const str = generator.quote_(block.getFieldValue('STR'));

// For a multiline text field.
const str = generator.multiline_quote_(block.getFieldValue('STR'));

Variables

變數名稱必須先由程式碼產生器清除,才能串連。基於以下兩個原因,我們必須這麼做:

  1. 變數是由使用者以選擇的語言輸入。也就是說,這些字元可能需要轉換為 ASCII 字元。舉例來說,「متغير」會轉換為「_D9_85_D8_AA_D8_BA_D9_8A_D8_B1」。
  2. 變數可能會與保留字詞發生衝突。這代表它們可能需要修改,以免發生衝突。舉例來說,「for」會轉換為「for2」。
const identifier = generator.getVariableName(block.getFieldValue('VAR'));

串連程式碼

取得欄位值並將其轉換為字串後,便可將該值與程式碼字串串連到正確的位置。

const code = `some code ${value} some more code`;

傳回碼

不同類型的區塊需要以不同方式傳回程式碼字串,請查看個別頁面瞭解詳情: