Trường biến

Trường biến lưu trữ một chuỗi làm giá trị và một chuỗi làm văn bản. Giá trị là mã nhận dạng của một biến, còn văn bản là tên của một biến.

Trường biến đổi

Một khối có nhãn "variable:" và một trường thả xuống có "x" được chọn.

Trường biến có trình chỉnh sửa đang mở

Khối tương tự với trình đơn thả xuống đang mở. Trình đơn này có các mục "x", "Đổi tên biến..." và "Xoá biến "x""

Trường biến trên khối thu gọn

Khối đó sau khi được thu gọn. Nút này có nhãn "variable: x" và một cạnh phải gồ ghề để cho biết nút đang ở trạng thái thu gọn.

dựa trên xu hướng

Không có kiểu

JSON

{
  "type": "example_variable_untyped",
  "message0": "variable: %1",
  "args0": [
    {
      "type": "field_variable",
      "name": "FIELDNAME",
      "variable": "x"
    }
  ]
}

JavaScript

Blockly.Blocks['example_variable_untyped'] = {
  init: function() {
    this.appendDummyInput()
        .appendField('variable:')
        .appendField(new Blockly.FieldVariable('x'), 'FIELDNAME');
  }
};

Đã nhập

JSON

{
  "type": "example_variable_typed",
  "message0": "variable: %1",
  "args0": [
    {
      "type": "field_variable",
      "name": "FIELDNAME",
      "variable": "x",
      "variableTypes": ["Number", "String"],
      "defaultType": "Number"
    }
  ]
}

JavaScript

Blockly.Blocks['example_variable_typed'] = {
  init: function() {
    this.appendDummyInput()
      .appendField('variable:')
      .appendField(new Blockly.FieldVariable(
          'X',
          null,
          ['Number', 'String'],
          'Number'
      ), 'FIELDNAME');
  }
};

Hàm khởi tạo biến nhận một tên biến không bắt buộc, một trình xác thực không bắt buộc, một mảng không bắt buộc gồm các loại biến và một loại mặc định không bắt buộc.

  • Tên biến phải là một chuỗi. Đây sẽ là tên của biến ban đầu mà trường này chứa. Nếu giá trị này là rỗng hoặc không xác định, một tên duy nhất sẽ được tạo.
  • Các loại biến phải là một mảng gồm các chuỗi. Thao tác này cho biết trường có thể lưu giữ những loại biến nào (tức là những loại biến cần thêm vào trình đơn thả xuống). Nếu giá trị này là rỗng hoặc không xác định, thì tất cả các loại biến sẽ được chấp nhận (và được thêm vào trình đơn thả xuống).
  • Loại mặc định phải là một chuỗi. Thao tác này sẽ được dùng khi tạo mô hình biến ban đầu của trường. Nếu được xác định, thì bạn nên thêm tham số này vào mảng loại biến. Nếu giá trị này là rỗng hoặc không xác định, thì giá trị này sẽ mặc định là một chuỗi trống, tức là biến ban đầu sẽ được nhập linh hoạt.

→ Để biết thêm thông tin về tính năng nhập liệu nghiêm ngặt, hãy xem phần Kiểm tra kiểu.

Chuyển đổi tuần tự

JSON

JSON cho một trường biến sẽ có dạng như sau:

{
  "fields": {
    "FIELDNAME": {
      "id": "QJD^+@[RVIwbLSZoDb:V"
    }
  }
}

Trong đó, FIELDNAME là một chuỗi tham chiếu đến một trường biến và giá trị là mã nhận dạng của biến mà trường tham chiếu.

Nếu đang sử dụng trường này trong hộp công cụ, bạn cũng có thể chỉ định trực tiếp tên và (không bắt buộc) loại, vì sẽ không có biến nào để tham chiếu.

{
  "fields": {
    "FIELDNAME": {
      "name": "my_variable",
      "type": "string"
    }
  }
}

XML

XML cho một trường biến có dạng như sau:

<field name="VARIABLE" id="QJD^+@[RVIwbLSZoDb:V" variabletype="">name</field>
  • Thuộc tính name của nút chứa một chuỗi tham chiếu đến một trường biến.
  • Thuộc tính id của nút chứa mã nhận dạng của biến mà trường tham chiếu.
  • Thuộc tính variabletype của nút chứa loại biến. variabletype tuân theo các quy tắc tương tự như tham số loại mặc định của hàm khởi tạo.
  • Văn bản bên trong của nút là tên của biến. Giá trị văn bản bên trong tuân theo các quy tắc tương tự như tham số tên biến của hàm khởi tạo.

Tạo trình xác thực biến

Giá trị của trường biến là một chuỗi, vì vậy, mọi trình xác thực phải chấp nhận một chuỗi và trả về một chuỗi, null hoặc undefined.

Dưới đây là ví dụ về một trình xác thực chỉ chấp nhận một số biến được xác định trước làm lựa chọn. Bạn cần xác định các biến này bằng hàm Workspace.getVariableMap().createVariable khi tải không gian làm việc.

function(newValue) {
  var validIds = ['Worf', 'Riker', 'Picard'];
  if (validIds.indexOf(newValue) == -1) {
    return null;
  }
  return newValue;
}

Ảnh GIF động minh hoạ chức năng xác thực đang hoạt động. Khi bạn chọn &quot;Picard&quot; hoặc &quot;Riker&quot; trong trình đơn thả xuống, trình đơn thả xuống sẽ được đặt thành lựa chọn đó. Khi chọn &quot;x&quot;, trình đơn thả xuống sẽ được đặt thành lựa chọn trước đó là &quot;Riker&quot;.