【问题标题】:Inheritance in Slim template languageSlim 模板语言中的继承
【发布时间】:2013-05-30 18:20:05
【问题描述】:

通过使用 Twig 的 PHP,我可以执行以下操作:

layout.twig

<html>
<body>
{% block content %}{% endblock %}
</body>
</html>

form.twig

{% extends "layout.twig" %}
{% block content %}
<div class="form">{% block form %}{% endblock %}</div>
{% endblock %}

login.twig

{% extends form %}
{% block form %}
<form>
    <input type="text" name="email" />
    <input type="submit">
</form>
{% endblock %}

这样我就有了所有页面的布局,带有表单和登录页面的页面布局。

但使用 Slim,我只能指定所有模板的父主布局:

layout.slim

html
  body ==yield

以及我网站上每个页面的特殊布局:
login.slim

div.form
  form
    input type="text" name="email"
    input type="submit"

有没有一种简单的方法可以在 Slim 中实现多层次的类 Twig 继承?

【问题讨论】:

    标签: ruby-on-rails ruby sinatra slim-lang


    【解决方案1】:

    看来我用 Sinatra 找到了 Slim 的解决方案:

    layout.slim

    html
      body
        == yield
    

    form.slim

    == slim :layout
      div.form
        == yield
    

    login.slim

    == slim :form
      form
        input type="text" name="email"
        input type="submit"
    

    【讨论】:

      【解决方案2】:

      我相信在 Rails 中它不存在模板继承之类的东西,但我相信 yieldcontent_for 方法没有必要。

      例如,您可以有一个_form.html.slim 布局:

      .form
        = yield
      

      一个_login.html.slim部分:

      form
        input type="text" name="email" 
        input type="submit"
      

      当你想用表单布局显示登录时,你应该这样做:

      = render partial: "login", layout: "form"
      

      【讨论】:

      • render :partial =&gt; ... 是特定于 Rails 的,但我使用 Sinatra。
      • @therussianphysicist 我不知道 :)。但它可能对其他人有用。
      【解决方案3】:

      login.html.slim

      = render layout: 'form' do
        form
          input type="text" name="email"
          input type="submit"
      

      【讨论】:

      • 您能否为您的答案添加更多解释?
      猜你喜欢
      • 2014-04-07
      • 2017-12-15
      • 1970-01-01
      • 1970-01-01
      • 2018-06-10
      • 1970-01-01
      • 2021-11-23
      • 2015-04-14
      相关资源
      最近更新 更多