驗證工具

驗證工具這個函式會擷取新的欄位值,並對 基礎架構這種簡易做法可用來自訂欄位。您可以觸發 導致欄位值變更、修改輸入內容或限制哪些值 可接受。

以下是一些常見的例子:

  • 將文字欄位限制為只接受英文字母。
  • 規定文字欄位不得空白。
  • 你必須提供未來的日期。
  • 根據下拉式選單修改區塊的形狀。
,瞭解如何調查及移除這項存取權。

驗證工具類型

驗證工具的執行時間會因驗證工具的類型而異 但實際上

類別驗證工具是欄位類型類別定義的一部分, 通常用於限制欄位允許的值「類型」 (例如 欄位只接受數字)。系統會對所有值執行類別驗證工具 傳遞至欄位 (包括傳送至建構函式的值)。

如要進一步瞭解類別驗證工具,請參閱 實作類別驗證工具 部分。

本機驗證工具是在欄位建立時定義,地區性 驗證工具會針對傳遞至欄位的所有值執行,但傳遞至 建構函式。也就是說,這些廣告放送是在:

  • XML 中包含的值。
  • 傳送至 setValue 的值。
  • 傳送至 setFieldValue 的值。
  • 使用者變更了值。

類別驗證工具會在本機驗證工具前執行,因為這項工具的用途如下 守護者可在傳送前確保值是正確的類型。 保持開啟狀態

如要進一步瞭解值驗證序列以及 可以參閱「值」

註冊本機驗證工具

本機驗證工具的註冊方式有兩種:

  • 直接新增至欄位的建構函式中。
,瞭解如何調查及移除這項存取權。
Blockly.Blocks['validator_example'] = {
  init: function() {
    // Remove all 'a' characters from the text input's value.
    var validator = function(newValue) {
      return newValue.replace(/\a/g, '');
    };

    this.appendDummyInput()
        .appendField(new Blockly.FieldTextInput('default', validator));
  }
};
Blockly.Blocks['validator_example'] = {
  init: function() {
    // Remove all 'a' characters from the text input's value.
    var validator = function(newValue) {
      return newValue.replace(/\a/g, '');
    };

    var field = new Blockly.FieldTextInput('default');
    field.setValidator(validator);

    this.appendDummyInput().appendField(field);
  }
};

上述任一方法都可納入 擴充功能、 支援 JSON 格式

欄位的值可能會因為要收集的欄位類型而有很大的差異 已驗證 (例如,一個數字欄位會儲存一個數字,而文字輸入欄位則是 會儲存字串),因此建議您參閱相關 ] 欄位,再建立驗證工具。

傳回值

驗證工具的傳回值會決定該欄位的後續動作。有 有三種可能:

修改過的傳回值

這是修改或不同的值,然後會成為該欄位的新值。 通常用於清理值,例如移除結尾 空白字元。

修改驗證工具範例:

// Remove all 'a' characters from the text input's value.
var validator = function(newValue) {
  return newValue.replace(/\a/g, '');
};

含有修改驗證工具的文字輸入欄位

空值傳回值

空值,表示指定值無效。在多數情況下 並忽略輸入值實際行為是由欄位中的 doValueInvalid_ 函式

空值驗證工具範例:

// Any value containing a 'b' character is invalid.  Other values are valid.
var validator = function(newValue) {
  if (newValue.indexOf('b') != -1) {
    return null;
  }
  return newValue;
};

含有空值驗證工具的文字輸入欄位

未定義的傳回值

未定義 (或沒有傳回陳述式) 或輸入值,表示 輸入值應成為該欄位的新值這些類型的驗證工具 通常和變更事件監聽器

Listener 驗證工具範例:

// Log the new value to console.
var validator = function(newValue) {
  console.log(newValue);
};

再次提醒您,顯示的 text 不一定代表欄位的 value

此值

驗證工具 this 的內部指的是欄位,而不是區塊。如果需要 存取驗證工具中的區塊,請使用 getSourceBlock 函式。你可以 請使用 bind 函式 設定呼叫驗證工具的結構定義。

使用 getSourceBlock 的程式碼範例:

Blockly.Blocks['colour_match'] = {
  init: function() {
    this.appendDummyInput()
        .appendField(new Blockly.FieldColour(
            null, this.validate
        ), 'COLOUR');
    this.setColour(this.getFieldValue('COLOUR'));
  },

  validate: function(colourHex) {
    this.getSourceBlock().setColour(colourHex);
  }
};

使用以下程式碼的程式碼範例: bind

Blockly.Blocks['colour_match'] = {
  init: function() {
    this.appendDummyInput()
      .appendField(new Blockly.FieldColour(
          null, this.validate.bind(this)
      ), 'COLOUR');
    this.validate(this.getFieldValue('COLOUR'));
  },

  validate: function(colourHex) {
    this.setColour(colourHex);
  }
};