Překreslení inputu pomocí snippetu (dependent select)

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

Ahoj,

v aplikaci používám dynamický select načítaný pomocí snippetu.

presenter:

protected function renderDefault()
{
	$this->template->_form = $this['myForm']; // workaround
}

/**
 * @param string $name
 * @return Form
*/
protected function createComponentMyForm($name)
{
    $form = new Form($this, $name);

    $form->addSelect('first', 'First', ['a', 'b']);
    $form->addSelect('second', 'second', ['c', 'd', 'e']);

    return $form;
}

default.latte:

{form myForm}
    {input first}
    {snippet second}
        {input second}
    {/snippet}
{/form}

Nelíbí se mi ale ta část $this->template->_form = $this['myForm']; a tuším že v novém nette už by se to takto nemělo používat (já zatím stále používám nette 2.3).

Myslel jsem si, že když celý formulář obalím do snippetArea, tak to bude fungovat:

default.latte:

{snippetArea wraper}
    {form myForm}
        {input first}
        {snippet second}
            {input second}
        {/snippet}
    {/form}
{/snippetArea}

myslel jsem, že se provede celý kód formuláře, ale odešle se pouze ten snippet. Po úpravě to ale skončilo chybou Undefined variable: _form.

Lze se tedy v Nette 2.3 nějak vyhnout přiřazování formuláře do proměnné _form? A to že v tomto případě nelze použít snippetArea je záměr?

David Matějka
Moderator | 6445
+
+1
-

v 2.3 to obalovani snippet areou jeste nefungovalo. tam mas asi dve moznosti

1. to prirazeni do _form, jak pouzivas ted. nebo
2.

{form myForm}
    {input first}
    {snippet second}
		{var $_form = $control['myForm']}
        {input second}
    {/snippet}
{/form}
Barvoj
Člen | 60
+
0
-

Ok. Nechám to tedy tak dokud nebudu aktualizovat Nette. Díky :)