Chuyển đổi tuần tự

Quá trình chuyển đổi tuần tự sẽ lưu trạng thái không gian làm việc của bạn để có thể tải lại không gian làm việc sau này. Điều này bao gồm việc chuyển đổi tuần tự trạng thái của mọi khối, biến hoặc trình bổ trợ mà bạn muốn lưu. Bạn có thể chuyển đổi tất cả dữ liệu cần lưu thành định dạng dựa trên văn bản để dễ dàng lưu trữ, sau đó tải dữ liệu đó trở lại không gian làm việc đầy đủ chức năng sau này.

Blockly cung cấp hai định dạng cho dữ liệu này: JSON và XML. Bạn nên sử dụng hệ thống JSON cho các dự án mới và khuyến khích các dự án cũ sử dụng XML để nâng cấp. Hệ thống XML là định dạng lưu cũ. JDK 8 sẽ không bị xoá nhưng sẽ không nhận được tính năng mới.

Hệ thống JSON

Hệ thống chuyển đổi tuần tự JSON bao gồm nhiều trình chuyển đổi tuần tự. Chúng tôi có sẵn các trình chuyển đổi tuần tự tích hợp sẵn cho các khối và biến, đồng thời bạn cũng có thể đăng ký thêm trình chuyển đổi tuần tự. Mỗi trình chuyển đổi tuần tự chịu trách nhiệm chuyển đổi tuần tự và chuyển đổi tuần tự trạng thái của một trình bổ trợ hoặc hệ thống cụ thể.

Lưu và tải

Không gian làm việc

Bạn có thể chuyển đổi tuần tự hoặc chuyển đổi tuần tự trạng thái của toàn bộ không gian làm việc bằng cách gọi các phương thức saveload trên không gian tên workspaces.

const state = Blockly.serialization.workspaces.save(myWorkspace);
Blockly.serialization.workspaces.load(state, myWorkspace);

Các lệnh gọi này chuyển đổi tuần tự hoặc chuyển đổi tuần tự ngược tất cả các hệ thống riêng lẻ (được biểu thị bằng trình chuyển đổi tuần tự) đã đăng ký với không gian làm việc.

Chặn riêng lẻ

Bạn có thể chuyển đổi tuần tự hoặc chuyển đổi tuần tự từng khối riêng lẻ bằng cách gọi các phương thức saveappend trên không gian tên blocks.

const blockJson = Blockly.serialization.blocks.save(myBlock);
const duplicateBlock =
    Blockly.serialization.blocks.append(blockJson, myWorkspace);

Các hệ thống riêng lẻ

Bạn có thể chuyển đổi tuần tự hoặc chuyển đổi tuần tự từng hệ thống (ví dụ: khối, biến, trình bổ trợ, v.v.) bằng cách tạo trình chuyển đổi tuần tự liên kết và gọi các phương thức saveload của trình chuyển đổi tuần tự đó.

// Saves only the variables information for the workspace.
const serializer = new Blockly.serialization.variables.VariableSerializer();
const state = serializer.save(myWorkspace);
serializer.load(state, myWorkspace);

Thứ tự chuyển đổi tuần tự

Hệ thống JSON có thứ tự huỷ chuyển đổi tuần tự rõ ràng, giúp bạn dễ dàng ngăn chặn tình trạng trùng lặp trong một lượt lưu.

Khi Blockly.serialization.workspaces.load được gọi, các trình chuyển đổi tuần tự sẽ được cấp trạng thái để giải tuần tự theo thứ tự mức độ ưu tiên. Tính năng này sẽ được giải thích kỹ hơn trong phần Trình chuyển đổi tuần tự và mục đích của trình chuyển đổi này là cho phép các trình chuyển đổi tuần tự phụ thuộc vào trạng thái từ các hệ thống khác.

Thứ tự huỷ chuyển đổi tuần tự của trình chuyển đổi tuần tự tích hợp sẵn là:

  1. Các mô hình biến được chuyển đổi tuần tự.
  2. Các mô hình quy trình được chuyển đổi tuần tự.
  3. Các khối được chuyển đổi tuần tự. Các khối cấp cao nhất riêng lẻ được chuyển đổi tuần tự theo thứ tự tuỳ ý.
    1. Loại được chuyển đổi tuần tự. Thao tác này sẽ tạo khối, kích hoạt phương thức khởi tạo và kết hợp các tiện ích.
    2. Các thuộc tính được giải tuần tự. Điều này bao gồm cả các thuộc tính có thể áp dụng cho bất kỳ khối nào. Ví dụ: x, y, thu gọn, tắt và dữ liệu.
    3. Trạng thái bổ sung được chuyển đổi tuần tự. Hãy xem tài liệu về Tiện ích và Trình sửa đổi để biết thêm thông tin.
    4. Khối được kết nối với khối mẹ (nếu có).
    5. Các biểu tượng được giải tuần tự. Các biểu tượng riêng lẻ được giải tuần tự theo thứ tự tuỳ ý.
    6. Các trường được chuyển đổi tuần tự. Các trường riêng lẻ được chuyển đổi tuần tự theo thứ tự tuỳ ý.
    7. Các khối đầu vào được chuyển đổi tuần tự. Bao gồm cả các khối được kết nối với đầu vào giá trị và đầu vào câu lệnh. Các dữ liệu đầu vào riêng lẻ được chuyển đổi tuần tự theo thứ tự tuỳ ý.
    8. Các khối tiếp theo được chuyển đổi tuần tự.

Thời điểm lưu trạng thái bổ sung

Đối với các khối, nếu bạn có một thứ tự thấp hơn phụ thuộc vào một thứ tự cao hơn trong thứ tự, bạn nên sao chép dữ liệu đó và thêm dữ liệu đó vào trạng thái bổ sung.

Ví dụ: nếu có một trường chỉ tồn tại nếu khối tiếp theo được kết nối, bạn nên thêm thông tin về khối tiếp theo đó vào trạng thái bổ sung để có thể thêm trường vào khối trước khi trạng thái của trường được chuyển đổi tuần tự.

Tuy nhiên, nếu có dữ liệu đầu vào chỉ tồn tại nếu một trường có một giá trị nhất định, bạn không cần thêm thông tin về trường đó vào trạng thái bổ sung. Điều này là do trạng thái của trường sẽ được chuyển đổi tuần tự trước tiên và khi trạng thái này được chuyển đổi tuần tự, bạn có thể thêm dữ liệu đầu vào vào khối của mình. Thông thường, việc thêm dữ liệu đầu vào sẽ được trình xác thực kích hoạt.

Xin lưu ý rằng quy tắc về trạng thái trùng lặp cũng phải tính đến việc ngăn xếp khối, biểu tượng, trường và khối đầu vào được chuyển đổi tuần tự theo thứ tự tuỳ ý. Ví dụ: nếu có một trường B chỉ tồn tại nếu một trường A khác có một giá trị nhất định, bạn nên thêm thông tin về A vào trạng thái bổ sung trong trường hợp B được chuyển đổi tuần tự trước A.

Lệnh gọi chặn

Để biết thông tin về cách thêm tính năng chuyển đổi tuần tự bổ sung vào các khối, hãy xem tài liệu về Tiện ích và trình sửa đổi.

Móc trường

Để biết thông tin về cách chuyển đổi tuần tự các trường, hãy xem tài liệu về Trường tuỳ chỉnh.

Móc của bộ chuyển đổi tuần tự

Hệ thống JSON cho phép bạn đăng ký các trình chuyển đổi tuần tự để chuyển đổi tuần tự và giải tuần tự một số trạng thái. Trình chuyển đổi tuần tự tích hợp sẵn của Blockly đảm nhận việc chuyển đổi tuần tự thông tin về các khối và biến. Tuy nhiên, nếu muốn chuyển đổi tuần tự thông tin khác, bạn cần thêm trình chuyển đổi tuần tự của riêng mình. Ví dụ: các nhận xét ở cấp không gian làm việc không được hệ thống JSON chuyển đổi tuần tự theo mặc định. Nếu muốn chuyển đổi tuần tự các đối tượng này, bạn cần đăng ký thêm một trình chuyển đổi tuần tự.

Các trình chuyển đổi tuần tự bổ sung thường được dùng để chuyển đổi tuần tự và chuyển đổi tuần tự trạng thái của một trình bổ trợ.

Blockly.serialization.registry.register(
    'workspace-comments',  // Name
    {
      save: saveFn,      // Save function
      load: loadFn,      // Load function
      clear: clearFn,    // Clear function
      priority: 10,      // Priority
    });

Khi đăng ký một trình chuyển đổi tuần tự, bạn phải cung cấp một số thông tin:

  • Tên của trình chuyển đổi tuần tự, nơi dữ liệu cũng được lưu.
  • Hàm để save trạng thái của trình bổ trợ/hệ thống liên kết với trình chuyển đổi tuần tự.
  • Hàm để clear trạng thái.
  • Một hàm dùng để load trạng thái.
  • priority dùng để xác định thứ tự giải mã.

    Bạn có thể đặt mức độ ưu tiên của trình chuyển đổi tuần tự dựa trên các mức độ ưu tiên tích hợp sẵn

Khi Blockly.serialization.workspaces.save được gọi, hàm save của mỗi trình chuyển đổi tuần tự sẽ được gọi và dữ liệu của hàm đó sẽ được thêm vào đầu ra JSON cuối cùng:

{
  "blocks": { ... },
  "workspaceComments": [ // Provided by workspace-comments serializer
    {
      "x": 239,
      "y": 31,
      "text": "Add 2 + 2"
    },
    // etc...
  ]
}

Khi Blockly.serialization.workspaces.load được gọi, mỗi trình chuyển đổi tuần tự sẽ được kích hoạt theo thứ tự ưu tiên. Trình chuyển đổi tuần tự có giá trị ưu tiên dương hơn sẽ được kích hoạt trước các trình chuyển đổi tuần tự có giá trị ưu tiên thấp hơn.

Khi một trình chuyển đổi tuần tự được kích hoạt, hai điều sẽ xảy ra:

  1. Hàm clear được cung cấp sẽ được gọi. Điều này đảm bảo trạng thái của trình bổ trợ/hệ thống của bạn được làm sạch trước khi tải thêm trạng thái. Ví dụ: trình chuyển đổi tuần tự nhận xét của workspace sẽ xoá tất cả các nhận xét hiện có khỏi không gian làm việc.
  2. Hàm load được cung cấp sẽ được gọi.

Hệ thống XML

Hệ thống XML cho phép bạn chuyển đổi tuần tự không gian làm việc thành một nút XML. Đây là hệ thống chuyển đổi tuần tự ban đầu của Blockly. Ứng dụng này hiện đã bị đóng băng, nghĩa là sẽ không nhận được tính năng mới. Do đó, bạn nên sử dụng hệ thống JSON nếu có thể.

API

Để biết thông tin về API của hệ thống XML, hãy xem tài liệu tham khảo.

Phần mở đầu khối

Để biết thông tin về cách thêm tính năng chuyển đổi tuần tự bổ sung vào các khối, hãy xem tài liệu về Tiện ích và trình sửa đổi.

Điểm hấp dẫn trên sân

Để biết thông tin về cách chuyển đổi tuần tự các trường, hãy xem tài liệu về Trường tuỳ chỉnh.

Chọn giữa JSON và XML

Bạn nên sử dụng trình chuyển đổi tuần tự JSON thay vì XML. Hệ thống JSON cho phép bạn chuyển đổi tuần tự trạng thái không gian làm việc thành một đối tượng JavaScript. Đây là một lợi thế vì:

  1. JSON dễ dàng nén hoặc chuyển đổi sang định dạng khác.
  2. JSON dễ dàng xử lý theo phương thức lập trình.
  3. JSON dễ dàng mở rộng và nối dữ liệu.

Ngoài ra, hệ thống XML sẽ không còn nhận được bản cập nhật và hệ thống này đã thiếu các tính năng so với trình chuyển đổi tuần tự JSON. Ví dụ: bạn có thể đăng ký trình chuyển đổi tuần tự JSON của riêng mình để dễ dàng lưu và tải dữ liệu bổ sung, chẳng hạn như dữ liệu cho các trình bổ trợ hoặc tuỳ chỉnh mà bạn đã thêm. Bạn không thể làm việc này trong hệ thống XML.

Nếu bạn từng sử dụng tính năng chuyển đổi tuần tự XML, hãy xem hướng dẫn di chuyển để biết thông tin về cách nâng cấp.