檢視原始碼 Phoenix.HTML.Form (Phoenix.HTML v4.1.1)
定義 Phoenix.HTML.Form
結構和與之互動的函式。
若要在 Phoenix 應用程式中建立實際的表單,請參閱 Phoenix.Component.form/1
組件。
存取行為
Phoenix.HTML.Form
結構實作 Access
行為。當您執行 form[field]
時,它會傳回包含 id
、name
、value
和 errors
等已預先填入欄位的 Phoenix.HTML.FormField
結構。
欄位名稱可以是原子或字串。如果是原子,它假設表單會將資料和錯誤都保持為原子。如果是字串,它則會視為資料和錯誤已儲存在該欄位的字串中。建構自 Ecto.Changeset
的表單僅支援原子欄位名稱。
可以「存取」原始資料結構中不存在的欄位。將動態建立 Phoenix.HTML.FormField
結構,並填入 name
及 id
等屬性。
自訂實作
有一個稱為 Phoenix.HTML.FormData
的通訊協定,可以由任何要轉換至 Phoenix.HTML.Form
結構的資料結構實作。
摘要
函式
定義 Phoenix.HTML.Form 結構。
接收兩個表單結構,檢查特定欄位是否有變更。
傳回對應表單欄位的 ID。
傳回對應表單欄位的 ID 和附加在其上的值。
傳回對應表單欄位的名稱。
傳回可套用於指定欄位的 HTML 驗證。
傳回對應表單欄位的值。
依據輸入 type
常態化輸入 value
。
傳回在選取中要使用的選項。
類型
@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 結構。
其欄位為
:source
- 實作表單資料協定的資料結構:impl
- 帶有表單資料協定實作的模組。這用於避免多重協定分派。:id
- 產生輸入欄位時要使用的 id:index
- 結構在表單中的索引:name
- 產生輸入欄位時要使用的名稱:data
- 用於儲存查詢資料的欄位:params
- 與此表單關聯的參數:hidden
- 作為隱藏輸入標籤在幕後傳送表單所需要的欄位的關鍵字清單:options
- 在建立表單時給予的選項清單,不包含任何表單資料特定金鑰:errors
- 與表單關聯的錯誤關鍵字清單
接收兩個表單結構,檢查特定欄位是否有變更。
如果其關聯值、錯誤、動作或實作有變更,則此欄位將會變更。這主要用於最佳化引擎,作為 Access
行為的延伸。
傳回對應表單欄位的 ID。
表單應該是 Phoenix.HTML.Form
或原子。
@spec input_id(t() | atom(), field(), Phoenix.HTML.Safe.t()) :: String.t()
傳回對應表單欄位的 ID 和附加在其上的值。
對於單選按鈕和多重選取方塊等輸入有用。
傳回對應表單欄位的名稱。
第一個引數應該是 Phoenix.HTML.Form
或原子。
範例
iex> Phoenix.HTML.Form.input_name(:user, :first_name)
"user[first_name]"
傳回可套用於指定欄位的 HTML 驗證。
傳回對應表單欄位的值。
form
應該是 Phoenix.HTML.Form
或原子。此欄位是字串或原子。如果欄位給定為原子,它將嘗試尋找具有原子金鑰的資料。如果是字串,它會尋找具有字串金鑰的資料。
當給定表單時,它會尋找變更,然後回到參數,最後回到預設結構/對應值。
由於函數也會查詢參數值,因此不保證該值會具有某種類型。例如,布林欄位會以參數「false」的方式傳送,而此函數會將其原樣傳回。若您需要標準化 input_value
的結果,請參閱 normalize_value/2
。
依據輸入 type
常態化輸入 value
。
某些 HTML 輸入值必須強制轉換,不然在呈現時會出現特異點。此函數的目標是封裝此邏輯。特別是
對於「datetime-local」類型,它會將
DateTime
和NaiveDateTime
轉換為沒有第二位精度的字串對於「checkbox」類型,它會傳回布林,取決於輸入值是不是「true」
對於「textarea」,它會加上一行首,保證換行不會在提交時被忽略。然而,此過程需要 textarea 在呈現時,它的內容後方沒有空格
傳回在選取中要使用的選項。
這對於手動建構選取非常有用。它預期會使用所有選項,以及一個或以上的選取值。
範例
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>