将功能公开给EEx模板

Phi*_*ipp 4 templates elixir

我正在使用EEx.eval_file,EEx.eval_string因为我在编译期间无法访问模板,并希望公开一些可以从模板内部调用的函数.

可以这样使用bindings(test: &test/1)传递引用但是我必须像这样调用它们从用户的角度来看并不是很好:<%= test.("Hello") %>

还有其他方法可以尝试吗?

Dog*_*ert 6

它没有记录AFAICS,而是EEx.eval_string内部调用Code.eval_quoted/3,第三个参数(options)按原样传递给该函数.Code.eval_quoted/3接受一个functions关键字参数,options其中包含要导入的函数:

:functions - 元组列表,其中第一个元素是模块,第二个元素是导入的函数名称和arity列表; 必须对函数名称和arity列表进行排序

资源

例:

iex(1)> EEx.eval_string ~s|<%= length("foo") %>|, [], functions: [{String, [length: 1]}]
"3"
Run Code Online (Sandbox Code Playgroud)

  • 另一种方法是在模板顶部添加"<%import String%>",然后对其进行评估.好处是它适用于编译和评估的模板. (4认同)