Biểu tượng lưu và tải

Một số biểu tượng có trạng thái cần được lưu, trong khi một số biểu tượng khác được tạo thực thể dựa trên trạng thái hiện có. Ví dụ: biểu tượng nhận xét cần phải lưu văn bản, còn biểu tượng cảnh báo thì không vì chúng được tạo thực thể dựa trên cách các khối được tạo đã kết nối.

Nếu biểu tượng cần lưu trạng thái, bạn cần triển khai ISerializableđăng ký .

Trạng thái mà biểu tượng trả về sẽ được đưa vào thuộc tính icons của trạng thái của khối:

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

Lưu trạng thái

Để lưu trạng thái của biểu tượng, bạn cần triển khai Phương thức saveState của ISerializable . Phương thức này có thể trả về tệp json tuỳ ý, tệp này được chuyển đến tệp loadState.

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

Dữ liệu sao lưu và chuyển đổi tuần tự đầy đủ

saveState cũng nhận được một tham số doFullSerialization (không bắt buộc). Đây là được sử dụng bởi các biểu tượng tham chiếu trạng thái được chuyển đổi tuần tự bởi trình chuyển đổi tuần tự (như mô hình dữ liệu sao lưu). Thông số này báo hiệu rằng trạng thái được tham chiếu sẽ không có sẵn khi khối được giải tuần tự, vì vậy phải chuyển đổi tuần tự tất cả trạng thái sao lưu. Ví dụ: điều này đúng khi một khối riêng lẻ được chuyển đổi tuần tự hoặc khi một khối được sao chép và dán.

Có hai trường hợp sử dụng phổ biến cho vấn đề này:

  • Khi một khối riêng lẻ được tải vào một không gian làm việc nơi dữ liệu sao lưu mô hình không tồn tại, biểu tượng có đủ thông tin ở trạng thái riêng để để tạo một mô hình dữ liệu mới.
  • Khi một khối được sao chép, biểu tượng sẽ luôn tạo một bản sao lưu mới thay vì tham chiếu một mô hình dữ liệu hiện có.

Trạng thái tải

Để lưu trạng thái của biểu tượng, bạn cần triển khai Phương thức loadState của ISerializable . Phương thức này lấy JSON do phương thức saveState trả về.

loadState(state) {
  this.state = state;
}

Đăng ký lớp biểu tượng

Cuối cùng, bạn cần đăng ký biểu tượng để hệ thống chuyển đổi tuần tự có thể tạo thực thể cho nó. Xin lưu ý rằng IconType được dùng để đăng ký biểu tượng cần có cùng một chuỗi với chuỗi được trả về bởi 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);