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ố 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 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 kết nối các khối.

Nếu biểu tượng cần lưu trạng thái, bạn cần triển khai giao diện ISerializableregister biểu tượng.

Trạng thái mà biểu tượng trả về sẽ có trong thuộc tính icons của trạng thái 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 giao diện ISerializable. Phương thức này có thể trả về tệp json tuỳ ý. Tệp này sẽ được truyền đến phương thức loadState.

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

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

saveState cũng nhận được một tham số doFullSerialization không bắt buộc. Tính năng này được sử dụng bởi các biểu tượng tham chiếu đến trạng thái được chuyển đổi tuần tự bởi một trình chuyển đổi tuần tự khác (như mô hình dữ liệu sao lưu). Các tín hiệu tham số 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 biểu tượng nà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.

Hai trường hợp sử dụng phổ biến cho loại tệp này là:

  • Khi một khối riêng lẻ được tải vào một không gian làm việc không tồn tại mô hình dữ liệu sao lưu, biểu tượng đó sẽ 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 và dán, biểu tượng sẽ luôn tạo một mô hình dữ liệu sao lưu mới thay vì tham chiếu đến một mô hình 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 giao diện ISerializable. Phương thức này lấy JSON mà phương thức saveState của bạn trả về.

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

Đăng ký các 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 biểu tượng đó. Hãy nhớ rằng IconType dùng để đăng ký biểu tượng cần có cùng chuỗi với chuỗi được phương thức getType trả về.

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);