blockly‏ > שדה

מחלקת שדה

כיתה מופשטת לשדה שניתן לערוך.

Signature:

export declare abstract class Field<T = any> implements IKeyboardAccessible, IRegistrable, ISerializable, IFocusableNode 

יישום: IKeyboardAccessible, ‏ IRegistrable, ‏ ISerializable, ‏ IFocusableNode

יצרנים

יצרן גורמי שינוי תיאור
(constructor)(value, validator, config) יצירת מופע חדש של הכיתה Field

מאפיינים

נכס גורמי שינוי סוג תיאור
borderRect_ protected SVGRectElement | null רכיב הגבול של SVG בשדה שעבר רינדור.
clickTarget_ protected Element | null הרכיב שאליו מצורף הטיפול בקליק.
constants_ protected ConstantProvider | null קבועים שמשויכים למעבד הגרפי של בלוק המקור.
DEFAULT_VALUE T | null

כדי לשנות את ערך ברירת המחדל שמוגדר בשדה **Field**, מעדכנים ישירות את אב הטיפוס.

לדוגמה: FieldImage.prototype.DEFAULT_VALUE = null;

EDITABLE בוליאני בדרך כלל, שדות שניתנים לעריכה מוצגים עם ממשק משתמש שמציין שהם ניתנים לעריכה. הם יישמרו גם על ידי ה-serializer.
enabled_ protected בוליאני האם אפשר לשנות את ערך השדה באמצעות הכלי לעריכה בבלוק שניתן לעריכה?
fieldGroup_ protected SVGGElement | null רכיב הקבוצה של SVG בשדה שעבר רינדור.
isDirty_ protected בוליאני האם צריך לבצע עיבוד מחדש של הבלוק הזה?
maxDisplayLength number מספר התווים המקסימלי של הטקסט שיוצג לפני הוספת שלוש הנקודות.
name? מחרוזת (אופציונלי) שם השדה. ייחודי בכל בלוק. בדרך כלל אין שמות לתוויות סטטיות.
NBSP

static

readonly

(לא צוין) רווח קשיח.
SERIALIZABLE בוליאני השדות שניתנים לסריאליזציה נשמרים על ידי ה-serializer, אבל השדות שלא ניתנים לסריאליזציה לא נשמרים. שדות שניתן לערוך צריכים גם להיות ניתנים לסריאליזציה. זה לא המצב כברירת מחדל, כדי ש-SERIALIZABLE יהיה תואם לאחור.
size_ protected גודל הפונקציה מקבלת את הגודל של השדה הזה. מכיוון של-getSize() ול-updateSize() יש תופעות לוואי, ה-shim הזה משמש כתוסף לשכבות משנה שרוצות לשנות את גבולות השדה כשמגדירים או מקבלים את הגודל, בלי להפעיל עיבוד לא רצוי או תופעות לוואי אחרות. חשוב לזכור שעל תתי-הסוגים לבטל את הגדרת ברירת המחדל של *שתי* הפונקציות get ו-set אם אחת מהן בוטלה. אפשר פשוט להפעיל את ההטמעה דרך super, אבל היא חייבת להתקיים בהתאם למפרט JS.
SKIP_SETUP

static

readonly

סמל ייחודי ערך שמשמש לאותת מתי בונה (constructor) של שדה *לא* צריך להגדיר את הערך של השדה או להריץ את configure_, ובמקום זאת צריך לאפשר לתת-סוג לעשות זאת.
sourceBlock_ protected חסימה | null הבלוק שאליו השדה הזה מצורף. מתחיל כ-null, ולאחר מכן מוגדר ב-init.
textContent_ protected טקסט | null רכיב תוכן הטקסט של השדה שעבר רינדור.
textElement_ protected SVGTextElement | null רכיב הטקסט בפורמט SVG של השדה שעבר רינדור.
validator_ protected FieldValidator<T> | null פונקציית אימות שנקראת כשהמשתמש עורך שדה שאפשר לערוך.
value_ protected T | null
visible_ protected בוליאני האם השדה גלוי או מוסתר כי הבלוק מכווץ?

Methods

שיטה גורמי שינוי תיאור
applyColour()

העדכון של השדה כך שיתאים לצבע או לסגנון של הבלוק.

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

מידע נוסף זמין במסמכי התיעוד של השדה, או בדוגמה של FieldDropdown.

bindEvents_() protected מקשרים אירועים לשדה. ניתן לשנות את ברירת המחדל של שיטות משנה אם הן צריכות לבצע טיפול בהזנה בהתאמה אישית.
canBeFocused() ראו IFocusableNode.canBeFocused.
configure_(config) protected עיבוד של מפת ההגדרות שהועברה לשדה.
createBorderRect_() protected יצירת רכיב rect של שוליים של שדה. לא ניתן לשנות את הערך הזה על ידי תתי-כיתות. במקום זאת, משנים את התוצאה של הפונקציה בתוך initView, או יוצרים פונקציה נפרדת לקריאה.
createTextElement_() protected יוצרים רכיב טקסט בשדה. לא ניתן לשנות את הערך הזה על ידי תתי-כיתות. במקום זאת, משנים את התוצאה של הפונקציה בתוך initView, או יוצרים פונקציה נפרדת לקריאה.
dispose()‎ מחיקת כל האובייקטים והאירועים ב-DOM ששייכים לשדה הזה שאפשר לערוך.
doClassValidation_(newValue) protected

אימות השינויים בערך של שדה לפני שהם מוגדרים. דוגמה להטמעה של תת-סוג מופיעה ב-**FieldDropdown**.

**הערה:** הפונקציה Validation מחזירה אפשרות אחת מבין T,‏ null ו-undefined. ההטמעה של **Field** אף פעם לא תחזיר את הערך undefined, אבל תת-מחלקה יכולה להחזיר את הערך undefined אם הערך החדש תואם ל-T.

doClassValidation_(newValue) protected
doValueInvalid_(_invalidValue, _fireChangeEvent) protected משמש כדי להודיע לשדה שהוזן ערך לא חוקי. ניתן לשנות את הערך הזה באמצעות תתי-כיתות. אפשר לעיין ב-FieldTextInput. פעולה ללא תוצאה כברירת מחדל.
doValueUpdate_(newValue) protected משמש לעדכון הערך של שדה. ניתן לשנות את הגדרת המאפיין הזה בסוגי משנה כדי לבצע אחסון מותאם אישית של ערכים או עדכון של דברים חיצוניים.
forceRerender() מאלצים עיבוד מחדש של הבלוק שבו השדה הזה מותקן. הפעולה הזו תגרום לעיבוד מחדש של השדה הזה ולהתאמה לשינויים בגודל. שדות אחרים באותו בלוק לא יעברו עיבוד מחדש, כי הגדלים שלהם כבר תועדו.
fromJson(_options) static

יש להטמיע מחדש את השיטה הזו בסוגי המשנה כדי ליצור את תת-המשנה של Field מאובייקט arg ב-JSON.

אסור לנסות לרשום תת-סוג של שדה ב-FieldRegistry אם תת-הסוג הזה לא ביטל את הגדרת ברירת המחדל של השיטה הזו.

fromXml(fieldElement) הגדרת ערך השדה על סמך רכיב ה-XML הנתון. יש לקרוא ל-Blockly.Xml בלבד.
getAbsoluteXY_() protected הפונקציה מחזירה את הקואורדינטות המוחלטות של הפינה הימנית העליונה של השדה הזה. המקור (0,0) הוא הפינה הימנית העליונה של גוף הדף.
getBorderRect() protected אחזור של אלמנט המלבן של המסגרת.
getClickTarget_() protected הרכיב שאליו רוצים לקשר את פונקציית הטיפול בקליק. אם לא מגדירים אותו במפורש, ברירת המחדל היא ה-root של ה-SVG של השדה. כשלוחצים על האלמנט הזה בשדה שניתן לעריכה, הכלי לעריכה נפתח.
getConstants() אחזור של ספק הקבוע של ה-Renderer.
getDisplayText_() protected אחזור הטקסט מהשדה הזה כדי להציג אותו בבלוק. יכול להיות שיהיה הבדל בין הערך הזה לבין הערך של getText בגלל פסיק נטוי (ellipsis) וסגנונות עיצוב אחרים.
getFlipRtl() הפונקציה מחזירה אם צריך להפוך את השדה ל-RTL או לא.
getFocusableElement() מידע נוסף זמין במאמר IFocusableNode.getFocusableElement.
getFocusableTree() מידע נוסף זמין במאמר IFocusableNode.getFocusableTree.
getSize()

הפונקציה מחזירה את הגובה והרוחב של השדה.

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

getSourceBlock() אחזור הבלוק שאליו השדה הזה מחובר.
getSvgRoot() הפונקציה מקבלת את רכיב הקבוצה של השדה שניתן לעריכה. משמש למדידת הגודל ולמיקום.
getText_() protected ווקשן למפתחים כדי לשנות את הטקסט המוחזר של השדה הזה. משנים את הערך אם ייצוג הטקסט של הערך בשדה הזה הוא לא רק הטמעה של המחרוזת של הערך. מחזירים null כדי להשתמש בהמרה של מחרוזת.
getText() אחזור הטקסט מהשדה הזה. משנים את התנהגות getText_ כדי לספק התנהגות שונה מאשר הטמעת הערך כמחרוזת.
getTextContent() protected אחזור תוכן הטקסט.
getTextElement() protected אחזור של רכיב הטקסט.
getTooltip() הפונקציה מחזירה את הטקסט של ההסבר הקצר בשדה הזה.
getValidator() הפונקציה מקבלת את פונקציית האימות לשדות שניתנים לעריכה, או null אם היא לא מוגדרת.
getValue() אחזור הערך הנוכחי של השדה.
initModel() הפונקציה מפעילה את המודל של השדה אחרי שהוא מותקן בבלוק. פעולה ללא תוצאה כברירת מחדל.
initView() protected יוצרים את ממשק המשתמש של הבלוק בשדה הזה.
isClickable() בודקים אם השדה הזה מגדיר את הפונקציה showEditor_.
isClickableInFlyout(autoClosingFlyout) בודקים אם השדה אמור להיות קליקבילי בזמן שהבלוק נמצא בחלון קופץ. כברירת מחדל, אפשר ללחוץ על שדות בחלונות קופצים שנשארים פתוחים תמיד, כמו תיבת הכלים הפשוטה, אבל לא בחלונות קופצים שנסגרים באופן אוטומטי, כמו תיבת הכלים של הקטגוריה. תת-כיתות יכולות לשנות את ההתנהגות הזו על ידי שינוי הפונקציה הזו. הערה: כדי שהפעולה הזו תהיה יעילה, isClickable צריך להחזיר גם את הערך true.
isCurrentlyEditable() בודקים אם אפשר לערוך את השדה הזה כרגע. חלק מהשדות לא ניתנים לעריכה אף פעם (למשל, תוויות טקסט). יכול להיות ששדות אחרים ניתנים לעריכה, אבל הם עשויים להופיע בבלוקים שלא ניתן לערוך אותם או להיות מושבתים כרגע.
isEnabled() בודקים אם אפשר לשנות את הערך של השדה הזה באמצעות הכלי לעריכה כשאפשר לערוך את בלוק המקור.
isSerializable() בודקים אם השדה הזה צריך לעבור סריאליזציה על ידי ה-renderer של ה-XML. הטיפול בלוגיקה של תאימות לאחור ומצבים לא תואמים.
isVisible() הפונקציה מקבלת את הערך 'true' אם השדה הזה ניתן לעריכה ו'false' אם לא.
loadLegacyState(callingClass, state) טוען את המצב הנתון באמצעות ה-hooks הישנים של XML, אם צריך להשתמש בהם. הפונקציה מחזירה את הערך true כדי לציין שהטעינה טופלה, ואת הערך false במקרים אחרים.
loadState(state) הגדרת המצב של השדה על סמך ערך המצב שצוין. צריך לקרוא לזה רק על ידי מערכת הסריאליזציה.
onLocationChange(_) הודעה לשדה על כך שהמיקום שלו השתנה.
onMouseDown_(e) protected טיפול באירוע pointerdown בשדה.
onNodeBlur() מידע נוסף זמין במאמר IFocusableNode.onNodeBlur.
onNodeFocus() מידע נוסף זמין במאמר IFocusableNode.onNodeFocus.
onShortcut(_shortcut) מטפל במקשי הקיצור שצוינו.
positionBorderRect_() protected מיקום של rect של גבול שדה אחרי שינוי גודל.
positionTextElement_(xOffset, contentWidth) protected מיקום רכיב הטקסט של שדה אחרי שינוי גודל. האפשרות הזו מטפלת גם במיקום LTR וגם במיקום RTL.
referencesVariables() אם השדה הזה מפנה למשתני Blockly כלשהם. אם הערך הוא true, יכול להיות שיהיה צורך לטפל בו באופן שונה במהלך השרשור (serialization) והפירוק (deserialization). ניתן לשנות את ההגדרה הזו בשכבות משנה.
refreshVariableName() אם השדה הזה מפנה למשתנים, צריך לרענן את שם המשתנה שאליו השדה מפנה.
render_() protected

הפונקציה משמשת את getSize() כדי להזיז או לשנות את הגודל של רכיבי DOM ולקבל את הגודל החדש.

כל העיבוד (rendering) שמשפיע על הגודל או הצורה של הבלוק צריך להתבצע כאן, והוא צריך להיות מופעל על ידי getSize().

repositionForWindowResize()

וו Hook למפתחים שמאפשר לשנות את המיקום של WidgetDiv במהלך שינוי גודל החלון. צריך להגדיר את ה-hook הזה אם בשדה יש WidgetDiv שצריך לשנות את המיקום שלו כשמשנים את גודל החלון. לדוגמה, שדות קלט טקסט מגדירים את ה-hook הזה כדי ש-WidgetDiv הקלט יוכל למקם את עצמו מחדש באירוע שינוי גודל החלון. הדבר חשוב במיוחד כשהקלדות מודליות מושבתות, כי במכשירי Android מתרחש אירוע שינוי גודל של חלון כשהקלדה במקלדת הרכה נפתחת.

אם רוצים שה-WidgetDiv ייעלם במקום לשנות את המיקום שלו, מחזירים את הערך false. זאת התנהגות ברירת המחדל.

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

saveLegacyState(callingClass) protected הפונקציה מחזירה גרסה של מצב ה-XML כמחרוזת, אם צריך להשתמש בו. אחרת, הפונקציה מחזירה null כדי לסמן שהשדה צריך להשתמש בסריאליזציה משלו.
saveState(_doFullSerialization) שמירת הערך של השדה הזה כמשהו שאפשר לסדר ברצף (serialize) ל-JSON. צריך לקרוא לזה רק על ידי מערכת הסריאליזציה.
setEnabled(enabled) מגדירים אם אפשר לשנות את הערך של השדה הזה באמצעות הכלי לעריכה כשאפשר לערוך את בלוק המקור.
setSourceBlock(block) מחברים את השדה הזה לבלוק.
setTooltip(newTip) הגדרת ההסבר הקצר בשדה הזה.
setValidator(handler)

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

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

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

setValue(newValue, fireChangeEvent) משמש לשינוי הערך של השדה. טיפול באימות ובאירועים. תת-כיתות צריכות לשנות את האופן שבו פועלות doClassValidation_ ו-doValueUpdate_ במקום לשנות את האופן שבו פועלת השיטה הזו.
showEditor_(_e) protected הוק של מפתח ליצירת עורך לשדה. כברירת מחדל, הפעולה הזו לא מתבצעת, וצריך לשנות את ההגדרה כדי ליצור עורך.
toXml(fieldElement) סריאליזציה של ערך השדה הזה ל-XML. יש לקרוא ל-Blockly.Xml בלבד.
updateEditable() מוסיפים או מסירים את ממשק המשתמש שמציין אם אפשר לערוך את השדה הזה או לא.
updateSize_(margin) protected עדכון גודל השדה על סמך הטקסט.