首页 > 解决方案 > 在 Elixir Phoenix 框架项目中允许子文件夹模板是否有一些缺点?

问题描述

默认情况下,不能使用子文件夹在Elixir Phoenix 框架中呈现部分模板,但可以在 web_app 模块视图定义中进行更改。这是我在开始一个新的 Phoenix 项目时总是做出的改变之一。

    def view do
      quote do
        use Phoenix.View,
          root: "lib/demo_web/templates",
          namespace: DemoWeb,
          # for template subfolders usage
          pattern: "**/*"

          .....
      end
   end

所以我想知道如果默认情况下不可能,可能有一个很好的理由。

有人告诉我这个,但我不明白:

如果您将模板嵌套在已经有视图模块设置的外部文件夹中,则内部模板也将被编译到外部视图模块中,这可能会出现问题。

请你能解释一下它是怎么出问题的吗?

标签: elixirphoenix-framework

解决方案


通过允许模板的子文件夹,您基本上是在对 phoenix 说每个子文件夹都应该编译到相应的顶级视图中。

对于一个没有很多页面的小型项目来说,这可能不是问题,但想象一下您开始有一些更复杂的东西,您决定嵌套视图?

我什至不知道 Phoenix 在这种情况下会如何反应,因为基本上这意味着您的模板将在两个不同的视图中编译......

如果它不起作用,您可能会花时间找出原因,如果确实如此,您可能会在某一时刻在顶级和子文件夹视图中使用相同的方法名称,在这种情况下将不再清楚你指的是哪一个。

看一下模板指南,最后一部分称为“跨视图共享模板”,它说:

通常,我们发现需要在应用程序的不同部分以相同的方式呈现小块数据。将这些模板移动到他们自己的共享目录中是一个很好的做法,以表明它们应该在应用程序的任何地方都可用。

这应该可以在不更改默认 Phoenix 行为的情况下为您提供所需的大部分内容


推荐阅读