【问题标题】:Phoenix: Interpolate function in string in templatePhoenix:在模板中的字符串中插入函数
【发布时间】:2017-03-01 07:39:10
【问题描述】:

我想在一组面包屑中显示一个链接(使用 Slime 进行标记)。

= link(@project.name, to: project_path(@conn, :show, @project))

这渲染得很好。但我想在上下文中显示它,以及其他链接。

# by concatenation
= link("Projects > ", to: project_path(@conn, :index)) <> link(@project.name, to: project_path(@conn, :show, @project))

# or by interpolation
#{link("Projects", to: project_path(@conn, :index))} > #{link(@project.name, to: project_path(@conn, :show, @project))}

所需的输出如下所示:

Projects > 项目名称

但是,这些技术都不起作用。如何将此链接添加到此文本?

如果你能解释为什么这不能像上面那样工作,那么奖励积分。

【问题讨论】:

  • 你为什么不把它们放在不同的行呢? = link(...)\n| &gt;\n= link(...)?
  • 插值提供了更多的控制力和清晰度,我认为,但我明白你的意思

标签: elixir phoenix-framework


【解决方案1】:

只要让它变成多行:

= link("Projects > ", to: project_path(@conn, :index))
= link(@project.name, to: project_path(@conn, :show, @project))

你仍然可以把它放在一行中:

link 函数返回如下元组:{:safe, "link_string"}。如果要将链接用作字符串,则需要通过 Kernel.elem(tuple, 1) 从元组中选择第二个元素。 See what content_tag (which is used in link()) returns.

您还需要使用raw() 呈现任何html标签。

这行得通:

= raw "#{Kernel.elem(link("Projects > ", to: project_path(@conn, :index)), 1)} #{Kernel.elem(link(@project.name, to: project_path(@conn, :show, @project)), 1)}"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    相关资源
    最近更新 更多