Mở rộng trường hiện có

Để mở rộng một trường hiện có, bạn phải thêm lớp con cho một trường có sẵn (ví dụ: FieldTextInput, FieldColour) rồi sửa đổi một phần cho phù hợp với nhu cầu của bạn. Một số phần của trường mà bạn có thể sửa đổi là:

Nếu bạn muốn tạo một trường tuỳ chỉnh không cần hành vi từ bất kỳ trường tích hợp nào, bạn nên tạo lớp con Field.

Tiện ích phổ biến

Hầu hết các trường tuỳ chỉnh đều mở rộng một trong 3 loại sau:

  • Nhập văn bản: Nếu muốn người dùng nhập vào trường của mình, bạn nên mở rộng FieldTextInput.
  • Số: Nếu muốn lưu trữ một số, bạn nên mở rộng FieldNumber.
  • Trình đơn thả xuống: Nếu bạn muốn tạo một trình đơn thả xuống nhưng lại muốn trình đơn này lưu trữ một mô hình khác chuỗi hoặc mô hình hình ảnh mặc định, bạn nên mở rộng FieldDropdown.
    • Thận trọng: Trước khi mở rộng FieldDropdown, hãy kiểm tra xem trường thả xuống của các tuỳ chọn tuỳ chỉnh không thể đáp ứng nhu cầu của bạn.

Trong một số trường hợp nhất định, bạn có thể muốn mở rộng một loại trường khác. Cho ví dụ: FieldLabelSerializable mở rộng FieldLabel.

Phân loại con

import * as Blockly from 'blockly';

export class MyCustomTextField extends Blockly.FieldTextInput {

  constructor(value, validator, config) {
    super(value, validator, config);
  }
}

Hàm khởi tạo cho lớp con của một trường trông rất giống với hàm khởi tạo cho trường tuỳ chỉnh. Chữ ký của hàm khởi tạo phụ phải thường khớp với chữ ký của hàm khởi tạo mẹ.

JSON và việc đăng ký

Bạn cũng nên đăng ký trường này một lần:

Blockly.fieldRegistry.register('my_custom_text_field', MyCustomTextField);

và triển khai fromJson trong lớp này để hoạt động với định dạng JSON:

static fromJson(options) {
  const value = Blockly.utils.parsing.replaceMessageReferences(options.value);
  return new MySubclassName(value);
}

Để biết thêm thông tin về cách đăng ký một trường, hãy xem JSON và đăng ký trong Tạo trường tùy chỉnh.