blockly > 欄位

欄位類別

可編輯欄位的抽象類別。

Signature:

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

實作: IASTNodeLocationSvgIASTNodeLocationWithBlockIKeyboardAccessibleIRegistrableISerializable

建構函式

建構函式 修飾符 說明
(建構函式)(值, 驗證工具, 設定) 建構 Field 類別的新例項

屬性

屬性 修飾符 類型 說明
borderRect_ protected SVGRectElement | 空值 算繪欄位的 SVG 框線元素。
clickTarget_ protected 元素 | 空值 點擊處理常式將繫結的元素。
constants_ protected ConstantProvider | 空值 與來源區塊轉譯器相關聯的常數。
方塊 字串 啟動編輯器的滑鼠遊標樣式。
DEFAULT_VALUE T | 空值

如要覆寫 **Field** 中設定的預設值,請直接更新原型。

範例:FieldImage.prototype.DEFAULT_VALUE = null;

可編輯 boolean 可編輯的欄位通常會顯示某種 UI,指出這些欄位可以編輯。序列化也會儲存這些檔案。
enabled_ protected boolean 我可以使用編輯區塊的編輯器變更欄位值嗎?
fieldGroup_ protected SVGGElement | 空值 算繪欄位的 SVG 群組元素。
isDirty_ protected boolean 這個區塊需要重新轉譯嗎?
maxDisplayLength 號碼 新增刪節號前顯示的文字長度上限。
名稱? 字串 (選填) 欄位名稱。在每個區塊中不重複。靜態標籤通常沒有名稱。
NBSP

static

readonly

(未聲明) 不分行空格。
可轉儲 boolean 序列化欄位是由序列化程式儲存,不可序列化的欄位則不會。可編輯的欄位也應可序列化。這並非預設情況,因此 SERIALIZABLE 具有回溯相容性。
size_ protected 尺寸
SKIP_SETUP

static

readonly

唯一符號 該值可用於表示欄位建構函式何時「不應」設定欄位值或執行 setup_,應讓子類別改為執行此動作。
sourceBlock_ protected 封鎖 | 空值 封鎖這個欄位已附加的欄位。啟動為空值,然後在 init 設定。
textContent_ protected 文字 | 空值 轉譯欄位的文字內容元素。
textElement_ protected SVGTextElement | 空值 算繪欄位的 SVG 文字元素。
validator_ protected FieldValidator<T> | 空值 使用者編輯可編輯欄位時呼叫驗證函式。
value_ protected T | 空值
visible_ protected boolean 欄位是否因收合而顯示或隱藏?

方法

方法 修飾符 說明
applyColour()

更新欄位以符合區塊的顏色/樣式。

如果欄位的顏色取決於區塊的顏色,則非抽象的子類別可能想要實作此方法。系統會在適當時機 (例如父項區塊或轉譯器變更) 自動呼叫此函式。

詳情請參閱欄位說明文件,或查看 FieldDropdown 範例。

bindEvents_() protected 將事件繫結至欄位。如果子類別需要自訂輸入處理作業,則可透過子類別覆寫。
configure_(config) protected 處理傳遞至欄位的設定對應。
createBorderRect_() protected 建立欄位邊框矩形元素。不會由子類別覆寫。請改為修改 initView 中的函式結果,或建立個別的函式來呼叫。
createTextElement_() protected 建立欄位文字元素。不會由子類別覆寫。請改為修改 initView 中的函式結果,或建立個別的函式來呼叫。
doClassValidation_(newValue) protected

在設定欄位值之前,驗證變更內容。如需子類別實作範例,請參閱 **FieldDropdown**。

**注意:** 驗證會傳回 Tnullundefined 之間的一個選項。**Field** 的實作絕不會傳回 undefined,但新值與 T 相容時,子類別可以傳回 undefined

doClassValidation_(newValue) protected
doValueInvalid_(_invalidValue, _fireChangeEvent) protected 用於通知欄位輸入無效值。可以透過子類別覆寫,請參閱 FieldTextInput。預設為免人工管理。
doValueUpdate_(newValue) protected 用於更新欄位值。子類別可以覆寫子類別來自訂儲存值/更新外部項目。
fromJson(_options) static

子類別應重新實作這個方法,以 JSON 引數物件建構其 Field 子類別。

如果該子類別尚未覆寫該子類別,嘗試在 FieldRegistry 中註冊欄位子類別就會發生錯誤。

getAbsoluteXY_() protected 傳回這個欄位左上角的絕對座標。起點 (0,0) 是指頁面內文的左上角。
getBorderRect() protected 取得邊框矩形元素。
getClickTarget_() protected 將點擊處理常式繫結至的元素。如未明確設定,則會預設為欄位的 SVG 根。點選這個可編輯欄位時,編輯器就會開啟。
getConstants() 取得轉譯器常數供應器。
getDisplayText_() protected 取得這個欄位中的文字,以便顯示在區塊中。可能會因為刪節號和其他格式而與 getText 不同。
getFlipRtl() 傳回是否應在 RTL 中翻轉欄位。
getSize()

傳回欄位的高度和寬度。

這「一般」應該是唯一從算繪__的地方。

getSourceBlock() 取得附加於這個欄位的區塊。
getSvgRoot() 取得這個可編輯欄位的群組元素。用於測量大小和位置。
getText_() protected 開發人員掛鉤以覆寫這個欄位的傳回文字。如果這個欄位值的文字表示法並非只是其值的字串層級轉換,則覆寫此欄位。將空值傳回至一般類型,以指定字串類型。
getText() 取得這個欄位中的文字。覆寫 getText_ 以提供與將值轉換為字串不同的行為。
getTextContent() protected 取得文字內容。
getTextElement() protected 取得文字元素。
getTooltip() 傳回這個欄位的工具提示文字。
getValidator() 取得可編輯欄位的驗證函式;如未設定,則為空值。
getValue() 取得欄位目前的值。
initModel() 在區塊中安裝欄位後,初始化欄位模型。預設為免人工管理。
initView() protected 為這個欄位建立區塊 UI。
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()

開發人員在調整視窗大小時,重新調整 WidgetDiv 的位置。如果您的欄位包含 WidgetDiv,且需要在調整視窗大小時重新調整其位置,則您需要定義這個掛鉤。例如,文字輸入欄位會定義這個掛鉤,讓輸入 WidgetDiv 可以在視窗調整大小事件中重新調整其位置。在停用強制回應輸入功能的情況下,這尤其重要,因為 Android 裝置會在螢幕鍵盤開啟時觸發視窗大小調整事件。

如果您希望 WidgetDiv 自行隱藏而不是重新位置,請傳回 false。此為預設行為。

DropdownDivs 已自行處理定位邏輯,因此如果您的欄位只有 DropdownDiv,就不必覆寫這個函式。

saveLegacyState(callingClass) protected 傳回 XML 狀態的字串化版本 (如果應使用)。否則,系統會傳回空值,以表示欄位應使用自己的序列化。
setEnabled(enabled) 在來源區塊可編輯時,設定能否使用編輯器變更這個欄位的值。
setSourceBlock(block) 將這個欄位附加到區塊。
setTooltip(newTip) 設定這個欄位的工具提示。
setValidator(handler)

為可編輯的欄位設定新驗證函式,或清除先前設定的驗證工具。

驗證函式會採用新的欄位值,並傳回已驗證的值。已驗證的值可以是輸入值、修改後的輸入值,或用來取消變更的空值。

如果函式未傳回任何內容 (或傳回未定義),新值會接受新值。這樣一來,您就能使用經過驗證的函式做為欄位層級變更事件通知的欄位。

setValue(newValue, fireChangeEvent) 用於變更欄位值。處理驗證和事件。子類別應覆寫 doClassValidation_ 和 doValueUpdate_,而非此方法。
showEditor_(_e) protected 開發人員掛鉤,為欄位建立編輯器。此為免人工管理的預設項目,必須覆寫這個值才能建立編輯器。
updateEditable() 新增或移除使用者介面,指出這個欄位是否可供編輯。
updateSize_(margin) protected 根據文字更新欄位的大小。