查看源代码 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
实现此模块定义的行为。
概述
回调
调用此回调以在模板的整个主体周围添加注释。
调用此回调以在调用函数组件之前添加调用者注释。
根据给定的二进制文件对标签类型进行分类。
实现属性的处理。
返回给定的二进制文件是 void 还是非 void。
回调
@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()}
实现属性的处理。
它返回一个引用的表达式或属性。如果返回属性,则第二个元素是列表,其中列表中的每个元素代表一个属性。如果列表元素是一个两位元组,则假设键是将在模板中静态写入的名称。第二个元素是值,只要可能(例如二进制文件或二进制文件在列表内),它也会被静态写入模板。
返回给定的二进制文件是 void 还是非 void。
这主要对 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}
) %>
定义一个内部块,通常由插槽使用。
此宏主要由提供 slot
实现的自定义 HTML 引擎使用,很少直接调用。 name
必须是插槽/块将存储在其中的分配名称。
如果您使用的是 HEEx 模板,则应使用其更高级别的 <:slot>
符号。有关更多信息,请参阅 Phoenix.Component
。