某些圖示的狀態需要儲存,其他圖示則會例項化 做出預測舉例來說,註解圖示需要儲存文字 而警告圖示則並非因為根據區塊的 已連線。
如需儲存圖示狀態,則需要導入
ISerializable
介面並註冊
圖示。
圖示傳回的狀態會納入應用程式的 icons
屬性中
區塊的狀態:
{
'blocks': {
'languageVersion': 0,
'blocks': [
{
'type': 'my_block',
'icons': {
// Your state goes here!
'my_icon': 'some state',
}
}
]
}
}
儲存狀態
如要儲存圖示狀態,您需要導入
ISerializable
的 saveState
方法
存取 API這個方法可能會傳回任意 json,並傳遞至
loadState
方法。
saveState() {
return this.state; // Some arbirtary JSON-compatible data.
}
完整序列化與備份資料
saveState
也會收到選用的 doFullSerialization
參數。這是
其他參考狀態的圖示
serializer (例如備份資料模型)。參數會指出
將區塊還原序列化時,系統就無法使用參照狀態,因此
圖示應將所有備份狀態本身序列化。舉例來說,
個別區塊序列化,或複製貼上區塊時。
以下是兩個常見用途:
- 將個別區塊載入備份資料的工作區時 ,則該圖示本身狀態有足夠的資訊, 建立新的資料模型
- 複製貼上區塊時,圖示一律會建立新的備份 而非參照現有資料模型
載入狀態
如要儲存圖示狀態,您需要導入
ISerializable
的 loadState
方法
存取 API這個方法會擷取 saveState
方法傳回的 JSON。
loadState(state) {
this.state = state;
}
註冊圖示類別
最後,您必須註冊圖示,序列化系統才能
例項化。請記得,註冊時使用的IconType
圖示的字串需與由其傳回的字串相同
getType
方法。
class myIcon extends Blockly.icons.Icon {
getType() {
return new Blockly.icons.IconType('my_icon');
}
}
Blockly.icons.registry.register(
new Blockly.icons.IconType('my_icon'), myIcon);