保存してアイコンを読み込む

保存が必要な状態を持つアイコンもあれば、インスタンス化されるアイコンもあります。 現在の状態に基づいて設定されます。たとえば コメントアイコンはテキストを保存し 警告アイコンは表示されませんが、警告アイコンは表示されません。 接続されています。

アイコンの状態を保存する必要がある場合は、 ISerializable インターフェースを作成して、API を登録し、 アイコンをクリックします。

アイコンから返される状態は、アプリケーションの icons プロパティに ブロックの状態:

{
  'blocks': {
    'languageVersion': 0,
    'blocks': [
      {
        'type': 'my_block',
        'icons': {
          // Your state goes here!
          'my_icon': 'some state',
        }
      }
    ]
  }
}

状態を保存

アイコンの状態を保存するには、 ISerializablesaveState メソッド 行うことができます。このメソッドは任意の JSON を返すことができ、これは loadState メソッドを使用します。

saveState() {
  return this.state;  // Some arbirtary JSON-compatible data.
}

完全なシリアル化とバッキング データ

saveState はオプションの doFullSerialization パラメータも受け取ります。これは、 別のアプリケーションによってシリアル化された状態を参照するアイコンが、 serializer(バッキング データモデルなど)を使用します。このパラメータは ブロックがシリアル化解除されたときに参照状態を利用できないため、 アイコンは、すべてのバッキング状態自体をシリアル化する必要があります。たとえば、これは真実です。 ブロックをシリアル化する場合や、ブロックをコピーして貼り付ける場合です。

一般的なユースケースは次の 2 つです。

  • バッキングデータが保存されるワークスペースに個々のブロックが モデルが存在しない場合は、アイコン自体の状態に十分な情報が 新しいデータモデルを作成します
  • ブロックをコピーして貼り付けると、常に新しいバッキングが作成される データモデルを使用します。

読み込み状態

アイコンの状態を保存するには、 ISerializableloadState メソッド 行うことができます。このメソッドは、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);