Zum Inhalt springen

select Viewhelper wird nicht befüllt

Erstellt am 20. Mai 2011 · 6 Antworten · letzte Antwort am 14. März 2013

Tags: Frage

dani2k6 ·

Hallo liebes Forum,

Ich verzweifle gerade daran, dass in meinem Template der select Viewhelper nicht befüllt wird. Dieser ist leer.
Ich übergebe in der newAction eine Ansammlung von AbstractEntity Objekten als Array an das Template:
(betreffendes Objekt: parentObject)

public function newAction(Tx_Crc806dbApp_Domain_Model_Metadata $newMetadata = NULL) {

                $parentObjects = $this->metadataRepository->findAll();
                $this->view->assign('parentObjects',$parentObjects );

                $keywords = $this->keywordsRepository->findAll();
                $this->view->assign('keywords',$keywords );

		$this->view->assign('newMetadata', $newMetadata);
                       
	}

Im Template kann ich die properties der Objekte parentObject wunderbar mit dem for-Viewhelper ausgeben:

<f:for each="{parentObjects}" as="parentObject">
		<tr>
			<td><f:link.action action="show" arguments="{parentObject : parentObject}"> {parentObject.identifier}</f:link.action></td>
   </tr>
	</f:for>

Mein select Viewhelper bleibt jedoch leer:

<f:form.select property="parentObject" options="{parentObjects}" optionLabelField="identifier" optionValueField="uid"  multiple="multiple" style="width: 30em"/>

Jemand ne Idee wo der Fehler liegen könnte ?

Viele Grüße
Daniel

Bluespuke ·
dani2k6 schrieb

Problem solved...
I did not pass the arguments from the template to the partial...

[ironie]
Vielen herzlichen Dank für diese ausfühliche Lösung, diese war sehr hilfreich für alle die ein ähnliches Problem haben!
[/ironie]

jank ·

wenn man mit Partials arbeitet muss man die Variablen, die man in diesen Verwenden möchte auch an das Partial übergeben:

<f:render partial="Product/Properties" arguments="{product:product}" />

Will man mehrere Variablen übergeben, muss man diese mit Komma trennen.

<f:render partial="Product/Properties" arguments="{product:product, colors:colors}" />
dani2k6 ·

hmm ok das war vielleicht ein wenig knapp.....

In meinem Controller weise ich dem Template das Objekt über folgende Codezeile zu:

 $this->view->assign('parentObjects',$parentObjects );

Nun kann ich in meinem New.html template file mit Hilfe des Fluid Viewhelpers das Objekt
folgendermaßen ansprechen

<f:for each="parentObject" as="parentObjects">
    {parentObject.property}  // property durch die Eigenschaft eures Domänenobjekts ersetzen
</f:for>

Nun hatte ich einen Teil meines Templates in ein Partial ausgelagert und wollte innerhalb des
Partials auf das Domänenobjekt zugreifen
Dazu muss man unbeding die Objekte als Parameter vom Template in das Partial übergeben:

<f:render partial="Metadata/properties" arguments="{parentObjects}" />

Ich hoffe das war verständlich

Liebe Grüße

eddy ·

Superklasse,

hänge an diesem Problem mit nicht befüllten selectboxen nun schon tagelang und endlich hier der entscheidende Hinweise mit den arguments in den partials.

Auf der anderen Seite ist es sehr nervtötend, zur Recherche nicht auf aktuelle Quellen zugreifen zu können. Viele Infos existieren zwar im Netz, aber oft veraltet oder widersprüchlich.

Nicht mal in der Fluid Viewhelper Reference kommt z.B. dieses Problem hier zur Sprache (man möge mich korrigieren, wenn dem doch so ist). #paralyzed#

Eddy

harald1972 ·

Jeder View müssen alle Parameter übergeben werden, die sie irgendwie verwenden soll.
(Ist ja irgendwie logisch)
D.h. auch (und vor allem) dann wenn z.B. ein Partial ein weiters Partial aufruft.

Beim ersten Mal hab ich auch lang gebraucht.
Inzwischen brauch ich nur noch lange, um die Stelle zu finden, bei der ich diese Übergabe vergessen habe.
Es gilt ja das Paradigma des Durchreichens von Objekten, Attributen, Methoden, irgendwie von allem.
Auf dem ganzen Weg, den die Objekte zurücklegen müssen, geht schonmal was verloren. 😉

Also: Wenn mal das Select leer ist, oder sonst irgendein Feld, den ganzen Weg absuchen, den der Inhalt gehen muss!

Gruß Harald