プロジェクトの 1 つに管理パネルを作成したいので、このチュートリアルから始めました: フォームのコレクションを埋め込む方法
二重埋め込みフォームの作成を続けたので、オブジェクトがあり、オブジェクトがあり、これらのオブジェクトにもオブジェクトがあります:D Doctrine マッピングは適切で、機能します。問題:「新しいプロパティの追加」をクリックすると、プロパティですが、[詳細の追加] (プロパティに詳細を追加する) をクリックすると、詳細のフィールドが作成されますが、追加のフィールドも 1 つ作成されます
<label class="required">1label__</label>
: フォームタイプ コード: メイン クラスの場合
$builder
->add('forma')
;
$builder->add('properties', 'collection',array(
'type' => new PropertyType(),
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false
));
プロパティ クラスの場合:
$builder
->add('nev')
//->add('szokokut')
;
$builder->add('details', 'collection',array(
'type' => new DetailType(),
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false
));
詳細クラスの場合:
$builder
->add('description')
//->add('property')
;
これらのコードは buildFrom() 関数からのものです。
余分なフィールドがある理由は何ですか?
最初のプロトタイプ:
<div id="szokokut_storebundle_szokokuttype_properties___name__"><div><label for="szokokut_storebundle_szokokuttype_properties___name___nev" class="required">Nev</label><input type="text" id="szokokut_storebundle_szokokuttype_properties___name___nev" name="szokokut_storebundle_szokokuttype[properties][__name__][nev]" required="required" maxlength="100" /></div><div><label class="required">Details</label><div id="szokokut_storebundle_szokokuttype_properties___name___details" data-prototype="<div><label class="required">__name__label__</label><div id="szokokut_storebundle_szokokuttype_properties___name___details___name__"><div><label for="szokokut_storebundle_szokokuttype_properties___name___details___name___description" class="required">Description</label><input type="text" id="szokokut_storebundle_szokokuttype_properties___name___details___name___description" name="szokokut_storebundle_szokokuttype[properties][__name__][details][__name__][description]" required="required" maxlength="100" /></div></div></div>"></div></div></div>
二番目:
<div><label class="required">1label__</label><div id="szokokut_storebundle_szokokuttype_properties_1_details_1"><div><label for="szokokut_storebundle_szokokuttype_properties_1_details_1_description" class="required">Description</label><input type="text" id="szokokut_storebundle_szokokuttype_properties_1_details_1_description" name="szokokut_storebundle_szokokuttype[properties][1][details][1][description]" required="required" maxlength="100" /></div></div></div>
問題はここにあります:チュートリアルから(少し変更して)、__name__
両方のプロトタイプのフィールドを置き換えます:/
var $addPropertyLink = $('<a href="#" class="add_property_link">Tulajdonság hozzáadása</a>');
var $newLinkLi = $('<p></p>').append($addPropertyLink);
jQuery(document).ready(function() {
propertyHolder.append($newLinkLi);
$addPropertyLink.on('click', function(e) {
e.preventDefault();
addPropertyForm(propertyHolder, $newLinkLi);
});
});
function addPropertyForm(collectionHolder, $newLinkLi) {
// Get the data-prototype we explained earlier
var prototype = collectionHolder.attr('data-prototype');
// Replace '__name__' in the prototype's HTML to
// instead be a number based on the current collection's length.
var newForm = prototype.replace(/__name__/g, collectionHolder.children().length);
// Display the form in the page in an li
var $newFormLi = $('<p></p>').append(newForm);
$newLinkLi.before($newFormLi);
addFormDeleteLink($newFormLi);
var $addDetailLink = $('<a href="#" class="add_detail_link">Részlet hozzáadása</a>');
var $LinkLi = $('<p></p>').append($addDetailLink);
$newFormLi.find('div[id$=_details]').append($LinkLi);
$addDetailLink.on('click',function(e){
e.preventDefault();
addDetailForm($newFormLi.find('div[id$=_details]'),$LinkLi);
});
}
function addFormDeleteLink($FormLi) {
var $removeFormA = $('<a href="#">törlés</a>');
$FormLi.append($removeFormA);
$removeFormA.on('click', function(e) {
// prevent the link from creating a "#" on the URL
e.preventDefault();
// remove the li for the tag form
$FormLi.remove();
});
}
function addDetailForm(collectionHolder,$newLinkLi){
// Get the data-prototype we explained earlier
var prototype = collectionHolder.attr('data-prototype');
// Replace '__name__' in the prototype's HTML to
// instead be a number based on the current collection's length.
var newForm = prototype.replace(/__name__/g, collectionHolder.children().length);
// Display the form in the page in an li
var $newFormLi = $('<p></p>').append(newForm);
$newLinkLi.before($newFormLi);
addFormDeleteLink($newFormLi);
}