blockly > שדה

שיעור שדה

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

Signature:

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

הטמעות: IASTNodeLocationSvg, IASTNodeLocationWithBlock, IKeyboardAccessible, IRegistrable, ISerializable

יצרנים

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

מאפיינים

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

כדי להחליף את ערך ברירת המחדל שמוגדר ב-**Field** (שדה**), צריך לעדכן את האב טיפוס ישירות.

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

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

static

readonly

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

static

readonly

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

שיטות

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

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

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

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

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

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

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

doClassValidation_(newValue) protected
doValue invalid_(_ invalidValue, _fireChangeEvent) protected משמש לשליחת התראה לשדה שהוזן ערך לא חוקי. אפשר לשנות את הערך של מחלקות משנה באמצעות השדה FieldTextInput. ללא פעולה כברירת מחדל.
doValueUpdate_(newValue) protected משמש לעדכון הערך של שדה. ניתן לשנות על ידי מחלקות משנה כדי לבצע אחסון מותאם אישית של ערכים/עדכון של דברים חיצוניים.
fromJson(_options) static

מחלקות המשנה צריכות ליישם מחדש את השיטה הזו כדי לבנות את המחלקה המשנית שלהן מאובייקט arg של JSON.

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

getAbsoluteXY_() protected מחזירה את הקואורדינטות המוחלטות של הפינה השמאלית העליונה של השדה הזה. המקור (0,0) הוא הפינה הימנית העליונה של גוף הדף.
getBorderRect() protected מקבל את הרכיב של מלבן הגבול.
getClickTarget_() protected הרכיב שאליו צריך לקשר את handler הקליקים. אם לא מגדירים במפורש, ברירת המחדל היא השורש של SVG של השדה. כשלוחצים על הרכיב הזה בשדה שניתן לעריכה, כלי העריכה נפתח.
getConstants() מוצאים את הספק הקבוע של כלי הרינדור.
getDisplayText_() protected מקבלים את הטקסט מהשדה הזה שיוצג בבלוק. יכול להיות שהאורך שונה מ-getText בגלל שלוש נקודות ובגלל פורמט אחר.
getFlipRtl() מחזירה אם צריך להפוך את השדה ב-RTL.
getSize()

מחזירה את הגובה והרוחב של השדה.

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

getSourceBlock() מקבלים את הבלוק שאליו מצורף השדה הזה.
getSvgRoot() קבלת רכיב הקבוצה עבור השדה הזה שניתן לעריכה. משמש למדידת הגודל ולמיקום.
getText_() protected הוק (hook) מפתח שיחליף את הטקסט שמוחזר בשדה הזה. שינוי אם ייצוג הטקסט של ערך השדה הזה הוא לא רק מחרוזת שמייצגת אותו. מחזירים את הערך null כדי לאתר נופש להמרת מחרוזת.
getText() מקבלים את הטקסט מהשדה הזה. אפשר לשנות את getText_ כדי לספק אופן פעולה אחר מלבד העברה של הערך למחרוזת.
getTextContent() protected הפונקציה מקבלת את תוכן הטקסט.
getTextElement() protected מקבל את רכיב הטקסט.
getTooltip() מחזירה את הטקסט של ההסבר הקצר על השדה הזה.
getValidator() הפונקציה מקבלת את פונקציית האימות בשדות שניתנים לעריכה, או null אם לא מוגדרת.
getValue() מקבלים את הערך הנוכחי בשדה.
initModel() מאתחל את המודל של השדה אחרי שהוא הותקן בבלוק. ללא פעולה כברירת מחדל.
initView() protected יוצרים את ממשק המשתמש של החסימה לשדה הזה.
isClickable() בודקים אם השדה הזה מגדיר את הפונקציה showEditor_ .
isClickableInFlyout(autoClosingFlyout) בודקים אם צריך ללחוץ על השדה כשהבלוק נמצא במצב של הנפה. ברירת המחדל היא שניתן ללחוץ על שדות בתזוזות שפתוחות תמיד, כמו ארגז הכלים הפשוט, אבל לא בסגירה אוטומטית כמו ארגז הכלים של הקטגוריה. כדי לשנות את ההתנהגות הזו, יכול להיות שמחלקות המשנה יבטלו את הפונקציה הזו. חשוב לזכור שגם הפונקציה isClickable חייבת להחזיר את הערך True כדי שתהיה לכך השפעה כלשהי.
isCurrentlyEditable() בודקים אם ניתן לערוך את השדה הזה כרגע. חלק מהשדות אף פעם לא ניתנים לעריכה (לדוגמה, תוויות טקסט). יכול להיות שאפשר לערוך שדות אחרים, אבל יכול להיות שהם קיימים בבלוקים שלא ניתנים לעריכה או שהם מושבתים כרגע.
isEnabled() בודקים אם ניתן לשנות את הערך של השדה הזה באמצעות העורך כשניתן לערוך את בלוק המקור.
isFullBlockField() protected

המדיניות הזו קובעת אם השדה הזה ימלא את כל הבלוקים או לא.

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

isSerializable() בודקים אם השדה הזה צריך לעבור סריאליזציה למעבד ה-XML. טיפול בלוגיקה של תאימות לאחור ומצבים לא תואמים.
isTabNavigable() מחזירה אם השדה ניתן לניווט באמצעות כרטיסייה.
isVisible() הפונקציה קובעת אם השדה שניתן לעריכה גלוי או לא.
loadLegacyState(callingClass, state) טוענת את המצב הנתון באמצעות ההוּקים הישנים של XML, אם צריך להשתמש בהם. הפונקציה מחזירה את הערך True כדי לציין שהטעינה טופלה. אחרת, הערך false.
onLocationChange(_) מודיעה לשדה שהמיקומים שלו השתנו.
onMouseDown_(e) protected טיפול באירוע של מצביע כלפי מטה בשדה.
onShortcut(_shortcut) טיפול במקש הקיצור הנתון.
positionBorderRect_() protected הצבת גבול גבול של שדה לאחר שינוי גודל.
positionTextElement_(xOffset, contentWidth) protected צריך למקם רכיב טקסט של שדה אחרי שינוי בגודל. הוא מטפל במיקום LTR ו-RTL.
render_() protected

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

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

repositionForWindowResize()

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

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

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

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

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

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

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

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