【发布时间】:2016-12-10 22:41:05
【问题描述】:
我在嵌套树枝嵌入时遇到了一些问题,尤其是当两个嵌入都定义了相同的变量时。
一个例子:一个简单的代码摘自表单布局,其中包含一个字段集、一些行和输入元素(为了清楚起见,删除了一些变量):
{% embed 'components/frmGroup' with {'id':'myFieldset'} %}
{% block main %}
{% embed 'components/frmRow' with {'id':'mySpecialFormRow'} %}
{% block main %}
{% include 'components/inpText' %}
...
{% endblock %}
{% endembed %}
{% embed 'components/frmRow' %}
{% block main %}
{% include 'components/inpText' %}
...
{% endblock %}
{% endembed %}
{% endblock %}
{% endembed %}
如您所见,frmGroup(字段集)和 frmRow(行)组件都可以采用变量 id。第一个 frmRow 嵌入很好,因为它定义了自己的 id,第二个 frmRow 出现问题,它不需要特定的 id(因此不定义一个)。但是当我查看输出的 html 代码时,我看到 formrow 带有 #myFieldset,即在 frmGroup 嵌入上设置的 id。不是我想要完成的:)
我尝试过使用“only”关键字,但这给了我一些非常奇怪的结果。我可以使用不同的变量名(frmGroupId 和 frmRowId),但这感觉很糟糕(并且会造成混乱),我还可以在第二个 frmRow 上显式定义和清空 id,但是我必须记住要在嵌套嵌入上定义哪些变量,这也不好看。
那么我该如何解决这个问题(在 Twig 中可以解决)?
【问题讨论】:
-
只需通过
nullid 并进行相应的测试? twigfiddle -
是的,但这意味着:1:你总是知道上下文......如果你把一组嵌入移动到不同的上下文中,可能会再次出现问题。 2:稍后将变量添加到最顶层的嵌入可能会破坏整个项目中的所有嵌套嵌入 3:大量额外代码(每个嵌套嵌入都需要变量重置)这是一个“可以使它工作”的解决方案,但我希望有更强大的东西:)
-
评论这个策略对我来说有点困难。我通常将一个对象或一组对象传递给我的视图。在我的情况下,您的第一个 ID 可能属于具有产品的类别,使代码更易于维护,因为我几乎没有冲突变量
{{ category.getId() }}{% for product in products %}{{ product.getId() }}{% endfor %}