שדות

שדות הם חלק חשוב ביצירת קוד, כי הם מגדירים ערכים שניתנים לעריכה על ידי המשתמש, כמו מחרוזות, מספרים וצבעים (בין היתר).

כדי לכלול ערכי שדות בקוד שנוצר, צריך לקבל את ערך השדה, ממירים אותו למחרוזת שאפשר להשתמש בה ואז משרשרים את המחרוזת עם את שאר הקוד.

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'));

משתנים

את שמות המשתנים צריך לעבור על ידי מחולל הקודים כדי שיוכלו לשנות אותם משורשרים. הדבר הכרחי משתי סיבות:

  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`;

קוד החזרה

סוגים שונים של בלוקים מחייבים החזרה של מחרוזת קוד לכן כדאי לבדוק את הדפים הנפרדים שלהם לקבלת מידע נוסף: