欄位是產生程式碼的重要部分,因為欄位會定義使用者可編輯的值,例如字串、數字和顏色 (等等)。
如要在產生的程式碼中納入欄位值,必須取得欄位值,將其轉換為可用字串,然後再串連字串與程式碼的其餘部分。
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
變數名稱必須先由程式碼產生器清除,才能串連。基於以下兩個原因,我們必須這麼做:
- 變數是由使用者以選擇的語言輸入。也就是說,這些字元可能需要轉換為 ASCII 字元。舉例來說,「
متغير
」會轉換為「_D9_85_D8_AA_D8_BA_D9_8A_D8_B1
」。 - 變數可能會與保留字詞發生衝突。這代表它們可能需要修改,以免發生衝突。舉例來說,「
for
」會轉換為「for2
」。
const identifier = generator.getVariableName(block.getFieldValue('VAR'));
串連程式碼
取得欄位值並將其轉換為字串後,便可將該值與程式碼字串串連到正確的位置。
const code = `some code ${value} some more code`;
傳回碼
不同類型的區塊需要以不同方式傳回程式碼字串,請查看個別頁面瞭解詳情: