Nette 2.4 – snippet a formContainer

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
kolsi
Člen | 131
+
0
-

Ahoj,

chtěl bych poprosit o radu, jak správně přepsat následující kód do Nette 2.4. Jde o formContainer obsahující snippet. I v Nette 2.3 jsem to dělal takovou menší oklikou, ale apsoň to fungovalo :) nyní to nejde.

Kód je takto:

{snippet positionInfo}
	...
	{form editPositionForm}
		...
		<fieldset>
			<legend>{_"Department roles"}</legend>
			{formContainer roles}
				{snippet roles}
					{var $_form = $presenter['editPositionForm']}
					<table>
						<tr n:foreach="$_form['roles']->containers as $id => $role">
							**<td width="40%">{input roles-$id-module_role}</td>**
							<td width="60%">{input roles-$id-user_id}</td>
							<td>{input roles-$id-remove}{input roles-$id-id}</td>
						</tr>
					</table>
				{/snippet}
				{input add}
			{/formContainer}
		</fieldset>
		...
	{/form}
	...
{/snippet}

Jedná se o kontejnet obsahující dynamický počet položek (addDynamic), kde po stisku tlačítka „add“ dojde k přidání nové položky a následně překreslení snippetu „roles“.

Od Nette 2.4 to na zvýrazněném řádku (označil jsem **) hlásí „Component with name ‚24‘ does not exist.“ (24 odpovídá proměnné $id).

Jak kód přepsat, aby byl správně? Musí jít překreslovat jak vnitřní snippet „roles“, tak ten vnější „positionInfo“.

Matey
Člen | 142
+
+1
-

Pravdepodobne by ti pomohlo niečo takéto:

{snippet positionInfo}
    ...
	{snippetArea editPositionFormWrapper}
    {form editPositionForm}
        ...
        <fieldset>
            <legend>{_"Department roles"}</legend>
            {formContainer roles}
                {snippet roles}
                    <table>
                        <tr n:foreach="$form['roles']->containers as $id => $role">
                            **<td width="40%">{input roles-$id-module_role}</td>**
                            <td width="60%">{input roles-$id-user_id}</td>
                            <td>{input roles-$id-remove}{input roles-$id-id}</td>
                        </tr>
                    </table>
                {/snippet}
                {input add}
            {/formContainer}
        </fieldset>
        ...
    {/form}
	{/snippetArea}
    ...
{/snippet}
  • pridaná snippetArea, odstránené predávanie formu do $_form

a prekreslenie snippetu roles potom volať spolu so snippetAreou:

$this->redrawControl('editPositionFormWrapper');
$this->redrawControl('roles');

Niečo o snipetoch si môžeš pozrieť v tomto videu David Matějka – Snippety – proč a jak (ne)fungují