檢視原始碼 Phoenix.HTML.Form (Phoenix.HTML v4.1.1)

定義 Phoenix.HTML.Form 結構和與之互動的函式。

若要在 Phoenix 應用程式中建立實際的表單,請參閱 Phoenix.Component.form/1 組件

存取行為

Phoenix.HTML.Form 結構實作 Access 行為。當您執行 form[field] 時,它會傳回包含 idnamevalueerrors 等已預先填入欄位的 Phoenix.HTML.FormField 結構。

欄位名稱可以是原子或字串。如果是原子,它假設表單會將資料和錯誤都保持為原子。如果是字串,它則會視為資料和錯誤已儲存在該欄位的字串中。建構自 Ecto.Changeset 的表單僅支援原子欄位名稱。

可以「存取」原始資料結構中不存在的欄位。將動態建立 Phoenix.HTML.FormField 結構,並填入 nameid 等屬性。

自訂實作

有一個稱為 Phoenix.HTML.FormData 的通訊協定,可以由任何要轉換至 Phoenix.HTML.Form 結構的資料結構實作。

摘要

函式

定義 Phoenix.HTML.Form 結構。

接收兩個表單結構,檢查特定欄位是否有變更。

傳回對應表單欄位的 ID。

傳回對應表單欄位的 ID 和附加在其上的值。

傳回對應表單欄位的名稱。

傳回可套用於指定欄位的 HTML 驗證。

傳回對應表單欄位的值。

依據輸入 type 常態化輸入 value

傳回在選取中要使用的選項。

類型

@type field() :: atom() | String.t()
@type t() :: %Phoenix.HTML.Form{
  action: atom(),
  data: %{required(field()) => term()},
  errors: [{field(), term()}],
  hidden: Keyword.t(),
  id: String.t(),
  impl: module(),
  index: nil | non_neg_integer(),
  name: String.t(),
  options: Keyword.t(),
  params: %{required(binary()) => term()},
  source: Phoenix.HTML.FormData.t()
}

函數

連結到此函數

%Phoenix.HTML.Form{}

檢視原始碼 (結構)

定義 Phoenix.HTML.Form 結構。

其欄位為

  • :source - 實作表單資料協定的資料結構

  • :impl - 帶有表單資料協定實作的模組。這用於避免多重協定分派。

  • :id - 產生輸入欄位時要使用的 id

  • :index - 結構在表單中的索引

  • :name - 產生輸入欄位時要使用的名稱

  • :data - 用於儲存查詢資料的欄位

  • :params - 與此表單關聯的參數

  • :hidden - 作為隱藏輸入標籤在幕後傳送表單所需要的欄位的關鍵字清單

  • :options - 在建立表單時給予的選項清單,不包含任何表單資料特定金鑰

  • :errors - 與表單關聯的錯誤關鍵字清單

連結到此函數

input_changed?(form1, form2, field)

檢視原始碼
@spec input_changed?(t(), t(), field()) :: boolean()

接收兩個表單結構,檢查特定欄位是否有變更。

如果其關聯值、錯誤、動作或實作有變更,則此欄位將會變更。這主要用於最佳化引擎,作為 Access 行為的延伸。

@spec input_id(t() | atom(), field()) :: String.t()

傳回對應表單欄位的 ID。

表單應該是 Phoenix.HTML.Form 或原子。

連結到此函數

input_id(name, field, value)

檢視原始碼
@spec input_id(t() | atom(), field(), Phoenix.HTML.Safe.t()) :: String.t()

傳回對應表單欄位的 ID 和附加在其上的值。

對於單選按鈕和多重選取方塊等輸入有用。

連結到此函數

input_name(form_or_name, field)

檢視原始碼
@spec input_name(t() | atom(), field()) :: String.t()

傳回對應表單欄位的名稱。

第一個引數應該是 Phoenix.HTML.Form 或原子。

範例

iex> Phoenix.HTML.Form.input_name(:user, :first_name)
"user[first_name]"
連結到此函數

input_validations(form, field)

檢視原始碼
@spec input_validations(t(), field()) :: Keyword.t()

傳回可套用於指定欄位的 HTML 驗證。

連結到此函數

input_value(form, field)

檢視原始碼
@spec input_value(t() | atom(), field()) :: term()

傳回對應表單欄位的值。

form 應該是 Phoenix.HTML.Form 或原子。此欄位是字串或原子。如果欄位給定為原子,它將嘗試尋找具有原子金鑰的資料。如果是字串,它會尋找具有字串金鑰的資料。

當給定表單時,它會尋找變更,然後回到參數,最後回到預設結構/對應值。

由於函數也會查詢參數值,因此不保證該值會具有某種類型。例如,布林欄位會以參數「false」的方式傳送,而此函數會將其原樣傳回。若您需要標準化 input_value 的結果,請參閱 normalize_value/2

連結到此函數

normalize_value(arg1, value)

檢視原始碼

依據輸入 type 常態化輸入 value

某些 HTML 輸入值必須強制轉換,不然在呈現時會出現特異點。此函數的目標是封裝此邏輯。特別是

  • 對於「datetime-local」類型,它會將 DateTimeNaiveDateTime 轉換為沒有第二位精度的字串

  • 對於「checkbox」類型,它會傳回布林,取決於輸入值是不是「true」

  • 對於「textarea」,它會加上一行首,保證換行不會在提交時被忽略。然而,此過程需要 textarea 在呈現時,它的內容後方沒有空格

連結到此函數

options_for_select(選項, 已選值)

檢視原始碼

傳回在選取中要使用的選項。

這對於手動建構選取非常有用。它預期會使用所有選項,以及一個或以上的選取值。

範例

options_for_select(["Admin": "admin", "User": "user"], "admin")
#=> <option value="admin" selected>Admin</option>
#=> <option value="user">User</option>

多個選取值

options_for_select(["Admin": "admin", "User": "user", "Moderator": "moderator"],
  ["admin", "moderator"])
#=> <option value="admin" selected>Admin</option>
#=> <option value="user">User</option>
#=> <option value="moderator" selected>Moderator</option>

群組也受到支援

options_for_select(["Europe": ["UK", "Sweden", "France"], ...], nil)
#=> <optgroup label="Europe">
#=>   <option>UK</option>
#=>   <option>Sweden</option>
#=>   <option>France</option>
#=> </optgroup>