Phoenix可复用模板

作者: 时见疏星 | 来源:发表于2017-01-25 10:13 被阅读101次

如果你使用过React或者Vue这类流行的前端框架,你会对可复用模板/组件的概念感到熟悉。实际上,在Phoenix中,我们也可以使用View和eex构建可复用模板,当然咯,状态流和数据流监听什么的还做不到,但是对于Dumb Components来说,很大一部分可以搞定。

我们来看一下一个基本的模板。

<Tabs>
  <Tab name="All Products" />
  <Tab name="Featured" />
</Tabs>

这样的好处是,当你需要修改Tabs或Tabs时,你只需要修改一处地方,然后整个应用的模板都会修改了。

在Phoenix中,我们可以实现这个功能。

1. 创建 ComponentView 和 templates/component 目录

defmodule MyApp.Web.ComponentView do
  use MyApp.Web, :view
end

2. 定义 Component 的模板

<!-- templates/component/tabs.html -->
<ul class="tabs">
  <%= assigns[:do] %>
</ul>

<!-- templates/component/tab.html -->
<li class="tab"><%= assigns[:name] %></li>

3. 当你需要tabs时使用这些模板

<%= render ComponentView, "tabs.html" do %>
  <%= render ComponentView, "tab.html", name: "All Products" %>
  <%= render ComponentView, "tab.html", name: "Featured" %>
<% end %>

目前,它能工作,但是比较冗余,我们来增加 ComponentHelpers 模块

# views/component_helpers.ex
defmodule MyApp.Web.ComponentHelpers do
  def component(template, assigns) do
    MyApp.Web.ComponentView.render(template, assigns)
  end
  
  def component(template, assigns, do: block) do
    MyApp.Web.ComponentView.render(template, Keyword.merge(assigns, [do: block]))
  end
end

然后,在 MyApp.Web 的 view 模块中导入

def view do
  quote do
    # ...
    import MyApp.Web.ComponentHelpers
  end
end

现在的 markup 变为了

<%= component "tabs.html" do %>
  <%= component "tab.html", name: "All Products" %>
  <%= component "tab.html", name: "Featured" %>
<% end %>

你还可以将它继续精简

<%= c "tabs.html" do %>
  <%= c "tab.html", name: "All Products" %>
  <%= c "tab.html", name: "Featured" %>
<% end %>

它虽然没有像React那样精简,但是也差不多了

<Tabs>
  <Tab name="All Products" />
  <Tab name="Featured" />
</Tabs>

这只是一个非常简单的示例,并不需要花很大力气,当你需要使用复杂的 markup 时,你可以考虑这种方式。

Ref

http://blog.danielberkompas.com/2017/01/17/reusable-templates-in-phoenix.html

相关文章

  • Phoenix可复用模板

    如果你使用过React或者Vue这类流行的前端框架,你会对可复用模板/组件的概念感到熟悉。实际上,在Phoenix...

  • 关于IntelliJ IDEA 的 基本使用方法

    创建模板 1.需要在Views 下的layouts下创建模板里面写的是可复用的页面 创建不可复用界面 1.需要在V...

  • xcode 创建可以复用的代码块

    #######摘要: 我们可以常用的代码块创建为模板,方便代码的复用,提高编码效率。Xcode创建可复用的代码块 ...

  • 组件

    一、前言 组件是可复用的 Vue 实例,可以理解为一段可复用的html模板及其数据和方法。 二、组件的注册和使用 ...

  • 再谈react组件

    在可复用组件而不是可复用函数时谈过react的组件化。当时正在忙于微信电影票的重构,写了大量拼凑的模板函数。 在文...

  • Django Template继承

    Templates继承可实现模板复用,公用区域统一配置,减少代码量,更容易更新和维护。 template-inhe...

  • 【练习】 模板复用

    题目要求: 知识点: 使用 template 就可以轻松完成任务。 代码实现:

  • AppWorker教程-UI复用

    UI复用 模板复用机制是android,ios等移动开发技术中类似listview,gridview,slidev...

  • 可扩展架构模式

    可扩展架构模式框架(编排能力、配置能力、插件机制),模板(场景化、可编程、动态装载),原子能力(能力抽象封装、高可复用)

  • 模板模式--可复用流程的局部定制

    算是读书笔记吧 极客时间--设计模式之美 什么是模板模式 Define the skeleton of an al...

网友评论

    本文标题:Phoenix可复用模板

    本文链接:https://www.haomeiwen.com/subject/qtutittx.html