【发布时间】:2012-03-14 18:23:57
【问题描述】:
我需要一些关于原型中的原型的帮助。 Symfony 在生成表单原型方面非常聪明,但是一旦您向下一层(即原型中的原型),它就会为两个原型重用 $$name$$。
这就是我的实体的原型字段的样子。 JQuery 用正确的索引值换出 $$name$$(基于子节点的数量)
<input type="text" id="entry_entities_$$name$$_contactFax" name="entry[entities][$$name$$][contactFax]" value="" />
到目前为止一切顺利。但是当你更深一层时,Symfony 也使用 $$name$$ 来下一层——这里是实体属性的原型:
<div id="entry_entities_123_properties" data-prototype="
<label for="entry_entities_$$name$$_properties_$$name$$_name">Name</label>
<input type="text" id="entry_entities_$$name$$_properties_$$name$$_name" name="entry[entities][$$name$$][properties][$$name$$][name]" value="" />
这意味着(在此示例中,实体 ID 为 123)所有属性的 ID 为 123:
name="entry[entities][123][properties][123][name]"
name="entry[entities][123][properties][123][name]"
name="entry[entities][123][properties][123][name]"
等等
在我看来,解决这个问题的最好方法是使用 $$somethingelse$$ 作为属性——有谁知道这是在哪里设置的——或者有没有人有一个完整的 JS 示例来解决这个问题?我开始对每一行的第二个 $$name$$ 进行可怕的查找/替换,但它变得非常混乱。我确信有一种简单的方法可以做到这一点,但我在互联网上找不到任何指南。
【问题讨论】:
-
你在prototype()函数中传递了'$$name$$',你不能在那里改吗?
-
实际上,我在发布后查看了 Symfony 代码。 $$name$$ 被硬编码到 CollectionType 中。看看 Symfony\Component\Form\Extension\Core\Type\CollectionType.php
-
@meze 谢谢你。我不确定你是否让我的日子过得更好 :-) 我是做一些 JS 黑客还是在 sf 2.1 beta 上运行我的项目?
-
取决于您有多少时间;) 2.1 测试版尚未公布。您还可以使用 'prototype_name' 选项定义自己的集合类型(请参阅下面的答案)。
标签: php jquery forms symfony symfony-2.0