【问题标题】:helper function within a hex package十六进制包中的辅助函数
【发布时间】:2021-01-26 23:44:50
【问题描述】:

我想创建一个十六进制包,它为 Phoenix 框架提供一个脚手架生成器,它使用 Tailwind CSS 而不是 Milligram。

它在云端。除了一件小事之外,所有的事情都有效: https://github.com/wintermeyer/phx_tailwind_generators

我无法解决的一件小事。在Mix.Tasks.Phx.Gen.Tailwind(作为默认脚手架生成器的副本开始)我调用error/1,通常看起来像这样:

defp error(field) do
  ~s(<%= error_tag f, #{inspect(field)} %>)
end

但对于 Tailwind CSS,我需要 mt-2 text-sm text-red-500 类才能工作。所以我想创建一个新的tailwind_error_tag/2 辅助函数,它看起来像这样:

defp tailwind_error_tag(form, field) do
  Enum.map(Keyword.get_values(form.errors, field), fn error ->
    content_tag(:p, translate_error(error),
      class: "mt-2 text-sm text-red-500",
      phx_feedback_for: input_name(form, field)
    )
  end)
end

但这不起作用,因为我不知道如何从 hex 包中作为助手访问此函数。

我该如何解决这个问题?

【问题讨论】:

标签: elixir phoenix-framework


【解决方案1】:

您的帮助函数不需要每次都生成,而只需由库的用户在单独的install 任务中生成一次,这会将tailwind_error_helper.ex 放在某处或只是简单地包含在您的lib 文件夹中(这将使您库成为运行时依赖项,而不仅仅是开发依赖项)。 从那里,您可以通过将帮助器导入到您的视图中来使模板对模板可用,如下所示:

# if you put it into a generated module in an install step in the web module
import <%= inspect context.web_module %>.TailwindErrorHelper, only: [tailwind_error_tag: 2]

# or if you add it to you library module
import PhxTailwindGenerators, only: [tailwind_error_tag: 2]

【讨论】:

    猜你喜欢
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 2011-06-01
    • 1970-01-01
    • 2023-04-08
    • 2014-02-18
    相关资源
    最近更新 更多