blockly > Field

คลาสฟิลด์

คลาสนามธรรมสําหรับช่องที่แก้ไขได้

ลายเซ็น:

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 องค์ประกอบ | null องค์ประกอบที่ตัวจัดการการคลิกเชื่อมโยงอยู่
constants_ protected ConstantProvider | null ค่าคงที่ที่เชื่อมโยงกับโปรแกรมแสดงผลของบล็อกแหล่งที่มา
DEFAULT_VALUE T | null

หากต้องการเขียนทับค่าเริ่มต้นที่ตั้งค่าไว้ใน **ช่อง** ให้อัปเดตโปรโตไทป์โดยตรง

ตัวอย่าง: FieldImage.prototype.DEFAULT_VALUE = null;

แก้ไขได้ บูลีน โดยทั่วไปแล้วช่องที่แก้ไขได้จะแสดง UI บางประเภทที่ระบุว่าแก้ไขได้ นอกจากนี้ เครื่องมือจัดรูปแบบข้อมูลจะบันทึกรายการเหล่านั้นด้วย
enabled_ protected บูลีน เปลี่ยนค่าในช่องได้ไหมโดยใช้เครื่องมือแก้ไขในบล็อกที่แก้ไขได้
fieldGroup_ protected SVGGElement | null องค์ประกอบกลุ่ม SVG ของช่องที่แสดงผล
isDirty_ protected บูลีน จำเป็นต้องแสดงผลบล็อกนี้อีกครั้งไหม
maxDisplayLength ตัวเลข จำนวนอักขระสูงสุดของข้อความที่จะแสดงก่อนเพิ่มเครื่องหมายจุดไข่ปลา
name? สตริง (ไม่บังคับ) ชื่อฟิลด์ ไม่ซ้ำกันภายในแต่ละบล็อก โดยปกติแล้วป้ายกำกับแบบคงจะไม่มีชื่อ
NBSP

static

readonly

(not declared) ช่องว่างไม่แยก
SERIALIZABLE บูลีน ฟิลด์ที่ serialize ได้จะได้รับการบันทึกโดยโปรแกรมจัดรูปแบบข้อความ ส่วนฟิลด์ที่ไม่สามารถ serialize ได้จะไม่ได้รับการบันทึก ฟิลด์ที่แก้ไขได้ควรเป็นฟิลด์ที่อนุกรมข้อมูลได้ ซึ่งไม่ใช่กรณีนี้โดยค่าเริ่มต้นเพื่อให้ SERIALIZABLE ใช้งานร่วมกับเวอร์ชันเก่าได้
size_ protected ขนาด รับขนาดของช่องนี้ เนื่องจาก getSize() และ updateSize() มีผลข้างเคียง การดำเนินการนี้จะทำหน้าที่เป็นชิมสำหรับคลาสย่อยที่ต้องการปรับขอบเขตของช่องเมื่อตั้งค่า/รับขนาดโดยไม่ทริกเกอร์การแสดงผลที่ไม่ต้องการหรือผลข้างเคียงอื่นๆ โปรดทราบว่าคลาสย่อยต้องลบล้างทั้ง get และ set หากมีการลบล้างอย่างใดอย่างหนึ่ง การใช้งานอาจเรียก super โดยตรง แต่ต้องเป็นไปตามข้อกำหนดของ JS
SKIP_SETUP

static

readonly

สัญลักษณ์ที่ไม่ซ้ำกัน ค่าที่ใช้เพื่อส่งสัญญาณเมื่อตัวสร้างของฟิลด์ควร *ไม่* ตั้งค่าของฟิลด์หรือเรียกใช้ 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 บูลีน ช่องมองเห็นได้หรือซ่อนอยู่เนื่องจากบล็อกถูกยุบ

เมธอด

วิธีการ คีย์ตัวปรับแต่ง คำอธิบาย
applyColour()

อัปเดตช่องให้ตรงกับสี/สไตล์ของบล็อก

คลาสย่อยที่ไม่ใช่นามธรรมอาจต้องการใช้วิธีนี้หากสีของช่องขึ้นอยู่กับสีของบล็อก ระบบจะเรียกใช้เมธอดนี้โดยอัตโนมัติในเวลาที่เกี่ยวข้อง เช่น เมื่อบล็อกหลักหรือโปรแกรมแสดงผลมีการเปลี่ยนแปลง

ดูข้อมูลเพิ่มเติมในเอกสารประกอบของฟิลด์ หรือดูตัวอย่างได้ที่ FieldDropdown

bindEvents_() protected เชื่อมโยงเหตุการณ์กับช่อง คลาสย่อยสามารถลบล้างได้หากต้องการจัดการอินพุตที่กำหนดเอง
canBeFocused() ดู IFocusableNode.canBeFocused
configure_(config) protected ประมวลผลแผนที่การกําหนดค่าที่ส่งไปยังช่อง
createBorderRect_() protected สร้างองค์ประกอบสี่เหลี่ยมผืนผ้าของเส้นขอบช่อง ไม่ให้คลาสย่อยลบล้าง ให้แก้ไขผลลัพธ์ของฟังก์ชันภายใน initView หรือสร้างฟังก์ชันแยกต่างหากเพื่อเรียกใช้แทน
createTextElement_() protected สร้างองค์ประกอบข้อความในช่อง ไม่ให้คลาสย่อยลบล้าง ให้แก้ไขผลลัพธ์ของฟังก์ชันภายใน initView หรือสร้างฟังก์ชันแยกต่างหากเพื่อเรียกใช้แทน
dispose() กำจัดออบเจ็กต์ DOM และเหตุการณ์ทั้งหมดที่เป็นของช่องที่แก้ไขได้นี้
doClassValidation_(newValue) protected

ตรวจสอบการเปลี่ยนแปลงค่าของช่องก่อนที่จะตั้งค่า ดูตัวอย่างการใช้งานคลาสย่อยได้ที่ **FieldDropdown**

**หมายเหตุ:** การยืนยันจะแสดงผลตัวเลือกเดียวระหว่าง T, null และ undefined การใช้งาน **Field** จะไม่แสดงผล undefined แต่อย่างใด แต่คลาสย่อยจะแสดงผล undefined ได้หากค่าใหม่เข้ากันได้กับ T

doClassValidation_(newValue) protected
doValueInvalid_(_invalidValue, _fireChangeEvent) protected ใช้เพื่อแจ้งให้ช่องทราบว่ามีการป้อนค่าที่ไม่ถูกต้อง คลาสย่อยสามารถลบล้างได้ โปรดดู FieldTextInput ไม่มีการดำเนินการใดๆ โดยค่าเริ่มต้น
doValueUpdate_(newValue) protected ใช้เพื่ออัปเดตค่าของฟิลด์ คลาสย่อยสามารถลบล้างได้เพื่อทำการจัดเก็บค่า/การอัปเดตสิ่งต่างๆ ภายนอกที่กำหนดเอง
forceRerender() บังคับให้แสดงผลบล็อกที่ติดตั้งช่องนี้อีกครั้ง ซึ่งจะแสดงผลช่องนี้อีกครั้งและปรับขนาดตามการเปลี่ยนแปลง ช่องอื่นๆ ในบล็อกเดียวกันจะไม่แสดงผลอีกครั้งเนื่องจากระบบบันทึกขนาดของช่องไว้แล้ว
fromJson(_options) static

คลาสย่อยควรใช้เมธอดนี้อีกครั้งเพื่อสร้างคลาสย่อย Field จากออบเจ็กต์อาร์กิวเมนต์ JSON

การพยายามลงทะเบียนคลาสย่อยของฟิลด์ใน FieldRegistry หากคลาสย่อยนั้นไม่ได้ลบล้างเมธอดนี้จะทำให้เกิดข้อผิดพลาด

fromXml(fieldElement) ตั้งค่าของช่องตามองค์ประกอบ XML ที่ระบุ ควรเรียกใช้โดย Blockly.Xml เท่านั้น
getAbsoluteXY_() protected แสดงผลพิกัดสัมบูรณ์ของมุมบนซ้ายของช่องนี้ จุดเริ่มต้น (0,0) คือมุมซ้ายบนของเนื้อหาหน้าเว็บ
getBorderRect() protected รับองค์ประกอบสี่เหลี่ยมผืนผ้าของเส้นขอบ
getClickTarget_() protected องค์ประกอบที่จะเชื่อมโยงกับตัวแฮนเดิลการคลิก หากไม่ได้ตั้งค่าไว้อย่างชัดแจ้ง ระบบจะใช้รูท SVG ของช่องเป็นค่าเริ่มต้น เมื่อคลิกองค์ประกอบนี้ในช่องที่แก้ไขได้ เครื่องมือแก้ไขจะเปิดขึ้น
getConstants() รับผู้ให้บริการค่าคงที่ของโปรแกรมแสดงผล
getDisplayText_() protected รับข้อความจากช่องนี้เพื่อแสดงในบล็อก อาจแตกต่างจาก getText เนื่องจากเครื่องหมายจุดหยีบและการจัดรูปแบบอื่นๆ
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 สร้าง UI ของบล็อกสําหรับช่องนี้
isClickable() ตรวจสอบว่าช่องนี้กําหนดฟังก์ชัน showEditor_ หรือไม่
isClickableInFlyout(autoClosingFlyout) ตรวจสอบว่าช่องควรคลิกได้หรือไม่ขณะที่บล็อกอยู่ในเมนูแบบเลื่อนลง ค่าเริ่มต้นคือช่องจะคลิกได้ในเมนูแบบเลื่อนลงที่เปิดอยู่เสมอ เช่น กล่องเครื่องมือแบบง่าย แต่จะไม่คลิกได้ในเมนูแบบเลื่อนลงที่ปิดโดยอัตโนมัติ เช่น กล่องเครื่องมือหมวดหมู่ คลาสย่อยอาจลบล้างฟังก์ชันนี้เพื่อเปลี่ยนลักษณะการทำงานนี้ได้ โปรดทราบว่า isClickable จะต้องแสดงผลเป็น "จริง" ด้วยเพื่อให้การดําเนินการนี้มีผล
isCurrentlyEditable() ตรวจสอบว่าช่องนี้แก้ไขได้หรือไม่ บางช่องจะแก้ไขไม่ได้ (เช่น ป้ายกำกับข้อความ) ช่องอื่นๆ อาจแก้ไขได้ แต่อาจอยู่ในบล็อกที่แก้ไขไม่ได้หรือปิดใช้อยู่
isEnabled() ตรวจสอบว่าค่าของฟิลด์นี้เปลี่ยนแปลงได้โดยใช้เครื่องมือแก้ไขเมื่อบล็อกแหล่งที่มาแก้ไขได้หรือไม่
isSerializable() ตรวจสอบว่าโปรแกรมแสดงผล XML ควรจัดรูปแบบฟิลด์นี้หรือไม่ จัดการตรรกะสําหรับความเข้ากันได้แบบย้อนหลังและสถานะที่ขัดแย้งกัน
isVisible() รับว่าช่องที่แก้ไขได้นี้มองเห็นได้หรือไม่
loadLegacyState(callingClass, state) โหลดสถานะที่ระบุโดยใช้ฮุก XML แบบเก่า หากควรใช้ แสดงผลเป็น "จริง" เพื่อระบุว่าจัดการการโหลดแล้ว หรือแสดงผลเป็น "เท็จ" หากไม่เป็นเช่นนั้น
loadState(state) ตั้งค่าสถานะของช่องตามค่าสถานะที่ระบุ ควรเรียกใช้โดยระบบการจัดทําซีเรียลเท่านั้น
onLocationChange(_) แจ้งให้ช่องทราบว่าได้เปลี่ยนตำแหน่งแล้ว
onMouseDown_(e) protected จัดการเหตุการณ์ pointerdown ในช่อง
onNodeBlur() โปรดดู IFocusableNode.onNodeBlur
onNodeFocus() โปรดดู IFocusableNode.onNodeFocus
onShortcut(_shortcut) จัดการแป้นพิมพ์ลัดที่ระบุ
positionBorderRect_() protected วางตำแหน่งสี่เหลี่ยมผืนผ้าขอบของช่องหลังจากมีการเปลี่ยนแปลงขนาด
positionTextElement_(xOffset, contentWidth) protected จัดตําแหน่งองค์ประกอบข้อความของช่องหลังจากมีการเปลี่ยนแปลงขนาด ซึ่งจะจัดการทั้งการจัดวางตำแหน่งแบบ LTR และ RTL
referencesVariables() ช่องนี้อ้างอิงตัวแปร Blockly หรือไม่ หากเป็นจริง ก็อาจต้องจัดการต่างกันระหว่างการจัดเก็บและถอดรหัส คลาสย่อยอาจลบล้างค่านี้
refreshVariableName() รีเฟรชชื่อตัวแปรที่ช่องนี้อ้างอิงหากช่องนี้อ้างอิงตัวแปร
render_() protected

ใช้ใน getSize() เพื่อย้าย/ปรับขนาดองค์ประกอบ DOM และรับขนาดใหม่

การแสดงผลทั้งหมดที่ส่งผลต่อขนาด/รูปร่างของบล็อกควรทำที่นี่ และควรทริกเกอร์โดย getSize()

repositionForWindowResize()

ฮุกสำหรับนักพัฒนาซอฟต์แวร์เพื่อจัดตำแหน่ง WidgetDiv ใหม่ระหว่างการปรับขนาดหน้าต่าง คุณต้องกําหนดฮุกนี้หากช่องมี WidgetDiv ที่ต้องจัดตําแหน่งใหม่เมื่อปรับขนาดหน้าต่าง เช่น ช่องป้อนข้อความจะกําหนดฮุกนี้เพื่อให้ WidgetDiv ของอินพุตสามารถจัดตําแหน่งใหม่ในเหตุการณ์การปรับขนาดหน้าต่าง ซึ่งสำคัญอย่างยิ่งเมื่อปิดใช้อินพุตแบบโมดัล เนื่องจากอุปกรณ์ Android จะเรียกเหตุการณ์การปรับขนาดหน้าต่างเมื่อเปิดแป้นพิมพ์บนหน้าจอ

หากต้องการให้ WidgetDiv ซ่อนตัวเองแทนที่จะเปลี่ยนตำแหน่ง ให้แสดงผลเป็นเท็จ นี่คือลักษณะการทำงานเริ่มต้น

DropdownDiv จะจัดการตรรกะการจัดตำแหน่งของตนเองอยู่แล้ว คุณจึงไม่จำเป็นต้องลบล้างฟังก์ชันนี้หากช่องมีเพียง DropdownDiv

saveLegacyState(callingClass) protected แสดงสถานะ XML ในรูปแบบสตริง หากควรใช้ มิเช่นนั้น ระบบจะแสดงผลเป็น Null เพื่อบ่งบอกว่าช่องควรใช้การแปลงเป็นอนุกรมของตนเอง
saveState(_doFullSerialization) บันทึกค่าของช่องนี้เป็นค่าที่แปลงเป็น JSON ได้ ควรเรียกใช้โดยระบบการจัดทําซีเรียลเท่านั้น
setEnabled(enabled) ตั้งค่าว่าค่าของช่องนี้จะเปลี่ยนแปลงได้โดยใช้เครื่องมือแก้ไขเมื่อบล็อกแหล่งที่มาแก้ไขได้หรือไม่
setSourceBlock(block) แนบช่องนี้กับบล็อก
setTooltip(newTip) ตั้งค่าเคล็ดลับเครื่องมือสำหรับช่องนี้
setValidator(handler)

ตั้งค่าฟังก์ชันการตรวจสอบใหม่สําหรับช่องที่แก้ไขได้ หรือล้างโปรแกรมตรวจสอบที่ตั้งไว้ก่อนหน้านี้

ฟังก์ชันโปรแกรมตรวจสอบจะรับค่าช่องใหม่และแสดงผลค่าที่ตรวจสอบแล้ว ค่าที่ตรวจสอบแล้วอาจเป็นค่าอินพุต ค่าอินพุตเวอร์ชันที่แก้ไขแล้ว หรือค่าว่างเพื่อยกเลิกการเปลี่ยนแปลง

หากฟังก์ชันไม่แสดงผลใดๆ (หรือแสดงผลเป็น "ไม่ระบุ") ระบบจะถือว่าค่าใหม่ถูกต้อง การดำเนินการนี้ช่วยให้ฟิลด์ใช้ฟังก์ชันที่ตรวจสอบแล้วเป็นการแจ้งเตือนเหตุการณ์การเปลี่ยนแปลงระดับฟิลด์ได้

setValue(newValue, fireChangeEvent) ใช้เพื่อเปลี่ยนค่าของช่อง จัดการการตรวจสอบและเหตุการณ์ คลาสย่อยควรลบล้าง doClassValidation_ และ doValueUpdate_ แทนที่จะใช้เมธอดนี้
showEditor_(_e) protected ฮุกสำหรับนักพัฒนาแอปเพื่อสร้างเครื่องมือแก้ไขสำหรับช่อง ซึ่งจะไม่มีผลโดยค่าเริ่มต้น และต้องลบล้างเพื่อสร้างผู้แก้ไข
toXml(fieldElement) แปลงค่าของช่องนี้เป็น XML ควรเรียกใช้โดย Blockly.Xml เท่านั้น
updateEditable() เพิ่มหรือนำ UI ที่ระบุว่าช่องนี้แก้ไขได้หรือไม่ออก
updateSize_(margin) protected อัปเดตขนาดของช่องตามข้อความ