檢視原始碼 Phoenix.LiveView.TagEngine 行為 (Phoenix LiveView v0.20.17)
EEx 引擎,可理解標籤。
Phoenix 應用程式無法直接使用。它為 Phoenix.LiveView.HTMLEngine
等引擎的組成建構塊。
通常以這種方式呼叫
EEx.compile_string(source,
engine: Phoenix.LiveView.TagEngine,
line: 1,
file: path,
caller: __CALLER__,
source: source,
tag_handler: FooBarEngine
)
其中 :tag_handler
實作此模組定義的行為。
摘要
呼叫
@callback annotate_body(caller :: Macro.Env.t()) :: {String.t(), String.t()} | nil
呼叫回呼以在範本主體周圍加入註解。
在呼叫函式元件之前,呼叫回呼以新增呼叫方註解。
根據給定的二進位檔案對標籤類型進行分類。
這必須傳回包含標籤類型和標籤名稱的二元組。例如,對於使用 HTML 作為預設標籤處理程序的 LiveView,則在給定的二進位檔案識別為 HTML 標籤的情況下,它將傳回 {:tag, 'div'}
。
您也可以傳回 {:error, "reason"},以便編譯器顯示此錯誤。
@callback handle_attributes(ast :: Macro.t(), meta :: keyword()) :: {:attributes, [{binary(), Macro.t()} | Macro.t()]} | {:quoted, Macro.t()}
實作屬性的處理程序。
它會傳回引號運算式的表達式或屬性。如果傳回屬性,第二個元素就是一個清單,清單中的每個元素都代表一個屬性。如果清單元素是二個元素的二元組,假設這個金鑰是會靜態寫入到範本中的名稱。第二個元素是值,它也會靜態寫入到範本(例如二進位檔案或清單中的二進位檔案)中,只要有可能。
傳回給定的二進位檔案是否為空或不是空。
這主要對 HTML 標籤有幫助,並在編譯期間內部使用。如果您想要忽略這一點,您可以僅實作 def void?(_), do: false
。
函式
根據給定的函式呈現元件。
使用者很少直接呼叫這個函數。這個函數通常會被 ~H
或其他引擎實作用來繪製 Phoenix.Component
。例如,以下
<MyApp.Weather.city name="Kraków" />
和這段相同
<%= component(
&MyApp.Weather.city/1,
[name: "Kraków"],
{__ENV__.module, __ENV__.function, __ENV__.file, __ENV__.line}
) %>
定義內部方塊,通常由插槽使用。
這段巨集主要由自訂 HTML 引擎使用,這些引擎提供 slot
實作,而且很少直接呼叫。 name
必須是巢槽/區塊會儲存在其下方之分配名稱。
如果你使用的是 HEEx 範本,應改使用它較高階的 <:slot>
標記。更多資訊請參閱 Phoenix.Component
。