Khối tuỳ chỉnh: Mô hình khối

Có một số mô hình để lựa chọn khi thiết kế ứng dụng Nền tảng này sử dụng Blockly. Bạn nên cân nhắc những lựa chọn này vì chúng ảnh hưởng đến các khối mà người dùng sẽ cần.

Cấu hình

Nhiều ứng dụng Blockly được dùng để mô tả cấu hình, thay vì so với các chương trình thực thi. Các ứng dụng cấu hình thường bắt đầu bằng Đang khởi tạo một khối cấp cơ sở trên không gian làm việc. Một ví dụ điển hình là thẻ Block Factory trong Công cụ dành cho nhà phát triển của Blockly:

Blockly.Blocks['factory_base'] = {
  init: function() {
    this.setDeletable(false);
    this.setMovable(false);
    this.setEditable(false);
    // etc...
  }
}

Blockly.serialization.blocks.append({'type': 'factory_base'}, workspace);

Điều này tạo ra một khối không thể xoá, không thể di chuyển, chứa mọi cấu hình của người dùng. Không gian làm việc có thể được chuyển đổi tuần tự bất cứ lúc nào để xác định cấu hình hiện tại.

Những ứng dụng như vậy có thể muốn tự động vô hiệu hoá bất kỳ quy tắc chặn nào không được kết nối với khối gốc. Điều này có thể được thực hiện trên một dòng:

workspace.addChangeListener(Blockly.Events.disableOrphans);

Chương trình nối tiếp

Phần lớn các ứng dụng Blockly được thiết kế để tạo các trình phát nối tiếp các chương trình. Người dùng xếp chồng các khối được thực thi theo thứ tự.

Mỗi khối (không bị vô hiệu hoá) trên không gian làm việc sẽ là một phần của . Nếu có nhiều ngăn xếp khối, thì khối cao hơn là thực thi đầu tiên. (Nếu 2 ngăn xếp có chiều cao gần bằng nhau, ngăn xếp bên trái (phải trong chế độ RTL) được ưu tiên.)

Không gian làm việc có thể được xuất sang mã thực thi bất cứ lúc nào. Mã này có thể được thực thi phía máy khách trong JavaScript (sử dụng eval hoặc JS Phiên dịch) hoặc phía máy chủ bằng bất kỳ ngôn ngữ nào.

import {javascriptGenerator} from 'blockly/javascript';

var code = javascriptGenerator.workspaceToCode(workspace);

Chương trình song song

Một số ứng dụng Blockly chọn thực thi tất cả các ngăn xếp khối trong song song thay vì tuần tự. Ví dụ: ứng dụng nhạc trong đó một vòng lặp trống chạy đồng thời với một giai điệu.

Một cách để triển khai quá trình thực thi song song là tạo mã cho từng chặn riêng lẻ:

import {javascriptGenerator} from 'blockly/javascript';

var json = Blockly.serialization.workspaces.save(workspace);

// Store top blocks separately, and remove them from the JSON.
var blocks = json['blocks']['blocks'];
var topBlocks = blocks.slice();  // Create shallow copy.
blocks.length = 0;

// Load each block into the workspace individually and generate code.
var allCode = [];
var headless = new Blockly.Workspace();
for (var i = 0; block < topBlocks.length; i++) {
  var block = topBlocks[i];
  blocks.push(block);
  Blockly.serialization.workspaces.load(json, headless);
  allCode.push(javascriptGenerator.workspaceToCode(headless));
  blocks.length = 0;
}

Nếu ngôn ngữ đích là JavaScript, thì mảng allCode có thể là dùng để tạo nhiều Trình thông dịch JS nhằm thực thi đồng thời. Nếu ngôn ngữ đích giống như Python, thì mảng allCode có thể được tập hợp thành một chương trình duy nhất sử dụng mô-đun phân luồng.

Giống như mọi chương trình song song, bạn cần phải đưa ra các quyết định cẩn thận về bất kỳ tài nguyên dùng chung nào như biến và hàm.

Chương trình thúc đẩy sự kiện

Trình xử lý sự kiện chỉ là các hàm được hệ thống gọi, thay vì hơn là do chương trình. Các khối này có thể đóng ngăn xếp các khối được thực thi hoặc có thể là các tiêu đề nằm trên đầu ngăn xếp khối.

Một số nhà phát triển thích thêm "chiếc mũ" lên đầu các khối sự kiện để chúng trông khác biệt với các khối khác. Đây không phải là giao diện mặc định cho Có thể chặn, nhưng bạn có thể thêm hằng số này bằng cách ghi đè hằng số trình kết xuất ADD_START_HATS thành true (Lớp học lập trình về trình kết xuất tuỳ chỉnh – Ghi đè hằng số). hoặc bằng cách thêm một giao diện và đặt tuỳ chọn mũ theo kiểu khối. Xem thêm có thể xem thông tin về cách đặt mũ trên các khối như một phần của chủ đề tại đây.

Trong mô hình dựa trên sự kiện, bạn cũng nên tạo một trình xử lý cho phần đầu của chương trình. Trong mô hình này, bất kỳ khối nào trên không gian làm việc không kết nối với một trình xử lý sự kiện sẽ bị bỏ qua và không thực thi.

Khi thiết kế một hệ thống sử dụng sự kiện, hãy cân nhắc xem hệ thống đó khả năng hoặc mong muốn để hỗ trợ nhiều phiên bản của cùng một sự kiện trình xử lý.