Quá trình chuyển đổi tuần tự là lưu trạng thái của không gian làm việc để có thể tải lại trạng thái đó vào 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 một không gian làm việc có đầy đủ chức năng.
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ũ. GCC 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ự. Có các trình chuyển đổi tuần tự tích hợp sẵn cho các khối và biến, bạn cũng có thể đăng ký các trình chuyển đổi tuần tự bổ sung. 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 save
và load
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.
Khối 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 save
và append
trên không gian tên blocks
.
const blockJson = Blockly.serialization.blocks.save(myBlock);
const duplicateBlock =
Blockly.serialization.blocks.append(blockJson, myWorkspace);
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 phương thức save
và load
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ự chuyển đổi tuần tự rõ ràng, giúp dễ dàng ngăn chặn trạng thái trùng lặp trong một lần lưu.
Khi Blockly.serialization.workspaces.load
được gọi, trình chuyển đổi tuần tự sẽ được cấp trạng thái để chuyển đổi tuần tự theo thứ tự ưu tiên. Điều này được giải thích thêm trong phần Trình chuyển đổi tuần tự và mục đích của phần này là cho phép trình chuyển đổi tuần tự phụ thuộc vào trạng thái của các hệ thống khác.
Thứ tự chuyển đổi tuần tự của trình chuyển đổi tuần tự tích hợp là:
- Các mô hình biến được chuyển đổi tuần tự.
- Các mô hình quy trình được chuyển đổi tuần tự.
- 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ỳ ý.
- 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.
- Các thuộc tính được chuyển đổi tuần tự. Điều này bao gồm 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.
- Trạng thái bổ sung được chuyển đổi tuần tự. Hãy xem tài liệu về Trình sửa đổi để biết thêm thông tin.
- Khối được kết nối với khối mẹ (nếu có).
- Biểu tượng được chuyển đổi tuần tự. Các biểu tượng riêng lẻ được chuyển đổi tuần tự theo thứ tự tuỳ ý.
- 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ỳ ý.
- 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ỳ ý.
- 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ứ gì đó thấp hơn trong thứ tự phụ thuộc vào một thứ gì đó 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 đó, 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 kích hoạt bởi một trình xác thực.
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.
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ề 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.
Hook trình chuyển đổi tuần tự
Hệ thống JSON cho phép bạn đăng ký trình chuyển đổi tuần tự để chuyển đổi tuần tự và chuyển đổi tuần tự một số trạng thái. Trình chuyển đổi tuần tự tích hợp của Blockly sẽ xử lý việc chuyển đổi tuần tự thông tin về các khối và biến, nhưng 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ụ: theo mặc định, hệ thống JSON không chuyển đổi tuần tự các nhận xét cấp không gian làm việc. 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. - Hàm để
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ị mức độ ưu tiên dương hơn sẽ được kích hoạt trước trình chuyển đổi tuần tự có giá trị mức độ ưu tiên dương ít 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:
- 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ự workspace-comments sẽ xoá tất cả bình luận hiện có khỏi workspace. - 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ề các 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ề 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.
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 của không gian làm việc thành một đối tượng JavaScript. Điều này mang lại lợi ích vì:
- JSON dễ dàng nén hoặc chuyển đổi sang định dạng khác.
- JSON dễ dàng xử lý theo phương thức lập trình.
- 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 trước đây bạn đã 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.