blockly > Field

欄位類別

可編輯的欄位的抽象類別。

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 封鎖 | 空值 已附加至這個欄位。以 null 啟動,然後在 init 中設定。
textContent_ protected 文字 | 空值 轉譯欄位的文字內容元素。
textElement_ protected SVGTextElement | 空值 轉譯後欄位的 SVG 文字元素。
validator_ protected FieldValidator<T> | 空值 使用者編輯可編輯的欄位時,系統會呼叫的驗證函式。
value_ protected T | 空值
visible_ protected boolean 欄位會因為區塊收合而處於可見狀態,還是隱藏?

方法

方法 修飾符 說明
applyColour()

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

如果欄位的顏色取決於區塊的顏色,則非抽象的子類別可能建議實作此方法。當父項區塊或轉譯器變更時,系統會自動呼叫此方法。

詳情請參閱欄位說明文件,或查看 Field 下拉式選單。

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) protected 用於通知欄位輸入了無效的值。可由子類別覆寫,請參閱 FieldTextInput。預設為免人工管理。
doValueUpdate_(newValue) protected 用於更新欄位的值。子類別可以覆寫,以便自訂值儲存/更新外部項目。
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() 取得可編輯的欄位的驗證函式,如未設定則傳回 null 。
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)

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

驗證工具函式會使用新的欄位值,並傳回通過驗證的值。驗證的值可以是輸入值、輸入值的修改後版本,也可以是 null 取消變更。

如果函式不會傳回任何值 (或傳回未定義),就會視為有效值。這樣一來,即可將使用已驗證函式做為欄位層級變更事件通知的欄位使用。

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