Мне нужна помощь с прототипами, которые находятся в прототипах. Symfony очень умна с созданием прототипов форм, но как только вы один слой вниз (то есть прототипы внутри прототипов), он повторно использует $$ name $$ для обоих прототипов.
Это то, что поле прототипа выглядит для моего объекта. JQuery свопы из $$ имя $$ с правильным значением индекса (на основе количества дочерних узлов)
<input type="text" id="entry_entities_$$name$$_contactFax" name="entry[entities][$$name$$][contactFax]" value="" />
До сих пор так хорошо. Но когда вы идете один уровень глубже, Symfony использует $$ имя $$ для следующего уровня вниз тоже - вот прототип для свойства объекта:
<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="" />
Это означает, что (в данном примере с идентификатором 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 $$ на каждой строке, но он стал очень грязным. Я уверен, что есть простой способ сделать это, но я не мог найти никаких гидов в Интернете.
Вы передаете функцию $$ name $$ в функции prototype(), разве вы не можете ее там изменить? – meze
На самом деле я заглянул в код Symfony после публикации этого. $$ name $$ жестко закодировано в CollectionType. Взгляните на Symfony \ Component \ Form \ Extension \ Core \ Type \ CollectionType.php – mogoman
Право. [Не жестко закодирован в 2.1] (https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Form/Extension/Core/Type/CollectionType.php). – meze