아이콘 저장 및 로드

일부 아이콘에는 저장해야 하는 상태가 있고 다른 아이콘은 인스턴스화됩니다. 기반으로 합니다. 예를 들어 댓글 아이콘은 텍스트를 저장해야 하며 경고 아이콘은 차단되지 않는 방법에 따라 인스턴스화되기 때문에 표시되지 않습니다. 연결됩니다.

아이콘이 상태를 저장해야 하는 경우 ISerializable 인터페이스를 열고 다음을 등록하세요. 아이콘을 클릭합니다.

아이콘에서 반환된 상태는 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 매개변수도 수신합니다. 이것은 다른 에 의해 직렬화된 상태를 참조하는 아이콘에서 사용 직렬화 (예: 데이터 모델 지원) 매개변수는 블록이 역직렬화되면 참조된 상태를 사용할 수 없으므로 아이콘은 모든 지원 상태 자체를 직렬화해야 합니다. 예를 들어 개별 블록이 직렬화될 때 또는 블록을 복사하여 붙여넣을 때.

이에 대한 두 가지 일반적인 사용 사례는 다음과 같습니다.

  • 개별 블록이 지원 데이터가 저장되는 작업공간에 로드될 때 존재하지 않는 경우 아이콘에 자체 상태로 충분한 정보가 있어 새 데이터 모델을 만듭니다
  • 블록을 복사하여 붙여넣으면 아이콘이 항상 새 배경을 만듭니다. 기존 모델을 참조하는 대신 해당 모델을 사용합니다.

로드 상태

아이콘의 상태를 저장하려면 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);