2012-11-03 12 views
7

Ho una struttura dati in cui un argomento contiene molte domande (da una a molte) e una domanda ha molte risposte (una a molte).Symfony 2 moduli, raccolta di incorporamenti nella raccolta incorporata

Ho impostato Domande come una raccolta incorporata nel modulo Argomento e tutto funziona al 100% grazie allo cookbook entry.

Quando provo a svilupparlo per incorporare una raccolta di moduli di risposta nel modulo Domanda, mi imbatto in un problema.

L'attributo data-prototype che contiene il modulo prototipo al livello più alto contiene la profondità completa del modulo, quindi include il prototipo sia per Domanda sia per Risposta. Ma usa lo stesso segnaposto __name__ per ogni livello.

<div id="topic_questions___name__"> 
<div class="control-group"> 
    <label for="topic_questions___name___questionText" class="control-label">question</label> 
    <div class="form-row-errors"></div> 
    <div class="controls"> 
     <textarea id="topic_questions___name___questionText" name="topic[questions][__name__][questionText]" required="required" class="input-block-level"></textarea> 
    </div> 
</div> 
<div class="control-group"> 
    <label class="control-label">answers</label> 
    <div class="controls"> 
     <div id="topic_questions___name___answers"  data-prototype="&lt;div class=&quot;control-group&quot;&gt;&lt;label class=&quot;control-label&quot;&gt;__name__label__&lt;/label&gt;&lt;div class=&quot;controls&quot;&gt;&lt;div id=&quot;topic_questions___name___answers___name__&quot;&gt;&lt;div class=&quot;control-group&quot;&gt;&lt;label for=&quot;topic_questions___name___answers___name___answerText&quot; class=&quot;control-label&quot;&gt;option&lt;/label&gt;&lt;div class=&quot;form-row-errors&quot;&gt;&lt;/div&gt;&lt;div class=&quot;controls&quot;&gt;&lt;input type=&quot;text&quot; id=&quot;topic_questions___name___answers___name___answerText&quot; name=&quot;topic[questions][__name__][answers][__name__][answerText]&quot; required=&quot;required&quot; maxlength=&quot;255&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;input type=&quot;hidden&quot; id=&quot;topic_questions___name___answers___name___sortOrder&quot; name=&quot;topic[questions][__name__][answers][__name__][sortOrder]&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;"></div> 
    </div> 
</div> 

Si può vedere la linea davvero lunga in fondo, che credo sia il prototipo-prototipo (!) Per il modulo di risposta. Non c'è modo che io possa vedere per sostituire solo i segnaposto relativi alla domanda [__name__] e non quelli relativi alla risposta.

Fare la normale

var newForm = prototype.replace(/__name__/g, collectionHolder.children().length); 

durante la creazione di un vero e proprio esempio di una forma Domanda ovviamente sostituisce tutte le istanze di __name__ con lo stesso valore, in modo che quando si crea il data-prototipo per il modulo di risposta, si è ha già sostituito tutti i segnaposto.

Questo è ciò che il data-prototype sembra che per il modulo di risposta, quando ho cliccato per aggiungere una forma reale domanda

<div class="control-group"> 
<label class="control-label">1label__</label> 
<div class="controls"> 
    <div id="topic_questions_1_answers_1"> 
     <div class="control-group"> 
      <label for="topic_questions_1_answers_1_answerText" class="control-label">option</label> 
      <div class="form-row-errors"></div> 
      <div class="controls"> 
       <input type="text" id="topic_questions_1_answers_1_answerText" name="topic[questions][1][answers][1][answerText]" required="required" maxlength="255" /> 
      </div> 
     </div> 
    </div> 
</div> 

Come si può vedere, la funzione doesnt __name__ segnaposto a tutto - è stato già sostituito con il conteggio per il modulo Domanda quando è stato creato il modulo domanda.

È possibile ottenere questo tipo di raccolta integrata a profondità multiple con il meccanismo fornito da Symfony?

Fintanto che tenta di utilizzare lo stesso segnaposto per ogni "livello", non riesco a vedere come.

risposta

Problemi correlati