מחלקת שדה
כיתה מופשטת לשדה שניתן לערוך.
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**, מעדכנים ישירות את אב הטיפוס. לדוגמה: |
|
EDITABLE | בוליאני | בדרך כלל, שדות שניתנים לעריכה מוצגים עם ממשק משתמש שמציין שהם ניתנים לעריכה. הם יישמרו גם על ידי ה-serializer. | |
enabled_ | protected |
בוליאני | האם אפשר לשנות את ערך השדה באמצעות הכלי לעריכה בבלוק שניתן לעריכה? |
fieldGroup_ | protected |
SVGGElement | null | רכיב הקבוצה של SVG בשדה שעבר רינדור. |
isDirty_ | protected |
בוליאני | האם צריך לבצע עיבוד מחדש של הבלוק הזה? |
maxDisplayLength | number | מספר התווים המקסימלי של הטקסט שיוצג לפני הוספת שלוש הנקודות. | |
name? | מחרוזת | (אופציונלי) שם השדה. ייחודי בכל בלוק. בדרך כלל אין שמות לתוויות סטטיות. | |
NBSP |
|
(לא צוין) | רווח קשיח. |
SERIALIZABLE | בוליאני | השדות שניתנים לסריאליזציה נשמרים על ידי ה-serializer, אבל השדות שלא ניתנים לסריאליזציה לא נשמרים. שדות שניתן לערוך צריכים גם להיות ניתנים לסריאליזציה. זה לא המצב כברירת מחדל, כדי ש-SERIALIZABLE יהיה תואם לאחור. | |
size_ | protected |
גודל | הפונקציה מקבלת את הגודל של השדה הזה. מכיוון של-getSize() ול-updateSize() יש תופעות לוואי, ה-shim הזה משמש כתוסף לשכבות משנה שרוצות לשנות את גבולות השדה כשמגדירים או מקבלים את הגודל, בלי להפעיל עיבוד לא רצוי או תופעות לוואי אחרות. חשוב לזכור שעל תתי-הסוגים לבטל את הגדרת ברירת המחדל של *שתי* הפונקציות get ו-set אם אחת מהן בוטלה. אפשר פשוט להפעיל את ההטמעה דרך super, אבל היא חייבת להתקיים בהתאם למפרט JS. |
SKIP_SETUP |
|
סמל ייחודי | ערך שמשמש לאותת מתי בונה (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 מחזירה אפשרות אחת מבין |
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 |
עדכון גודל השדה על סמך הטקסט. |