Formular se neodesle (removeComponent)

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

Zdravim,

Mam formular, ktery vklada polozky do stromove struktury.

Polozka muze byt bud typu node nebo odkaz. Dle zvoleneho typu se dynamicky zobrazi nekolik souvisejicich prvku. Mam ale problem s jednim prvkem, ktery mi zpusobuje to, ze se formular neodesle.


$form->addRadioList('item_type', 'Typ položky', array('node' => 'Sekce', 'link' => 'Odkaz'))->setDefaultValue('node')->setOption('description', 'Odkaz bude zobrazen v menu.')
                ->addCondition(Form::EQUAL, 'node')
                ->toggle('frm-menuForm-in_menu-pair')
                ->elseCondition(Form::EQUAL, 'link')
                ->toggle('frm-menuForm-link-pair')
                ->toggle('frm-menuForm-link_target-pair')
                ->toggle('frm-menuForm-link_type-pair')
                ->endCondition();

Zde bych teoreticky mohl mit jeste ->toggle(‚frm-menuForm-link_color-pair‘), ale zobrazeni tohoto prvku zavisi jeste na dalsi hodnote jineho prvku.

Formular zobrazuju v modal okne pomoci handleAddForm($nodeId) z vice mist – bud obecneho nebo v nejakem miste ve stromu – znam parent – tedy $nodeId.
Pokud $nodeId nemam, zobrazim ve formulari take selectbox, aby uzivatel umisteni vybral.

if (empty($id) AND empty($nodeId))
        {
            $form->addSelect('parent', 'Umístění', $menuIt, 10)->setOption('description', Html::el()->setHtml('Vyberte nadřazenou sekci <strong>pod kterou</strong> bude položka vložena.'))->addCondition(Form::IS_IN, array(1, 2))->addConditionOn($form['item_type'], Form::EQUAL, 'node')->toggle('frm-menuForm-subweb-pair');
            if ($this->lang == 'cs')
            {
                $form['parent']->addCondition(Form::IS_IN, array(1, 2))->addConditionOn($form['item_type'], Form::EQUAL, 'node')->toggle('frm-menuForm-show_events-pair');
                $form['parent']->addCondition(Form::IS_IN, array(1, 2))->addConditionOn($form['item_type'], Form::EQUAL, 'link')->toggle('frm-menuForm-link_color-pair');
            }
            $form['parent']->getLabelPrototype()->class('required');
            $form['parent']->setAttribute('class', 'span5');
        }
        else
        {
            $form->addHidden('parent');
        }

Prvek link_color (selectbox) se ma zobrazit jen v pripade, ze $nodeId <= 2 a take pokud je tedy splnena podminka ze vkladana polozka je typu link.

handleAddForm:

public function handleAddForm($nodeId = '')
    {

        if ($this->isAjax())
        {
            $subtitle = '';
            if (is_numeric($nodeId))
            {
				$section = $this->template->section = $this->menu->find($nodeId);
                $subtitle = ' pod ' . $section->name;
                $this['menuForm']['parent']->setDefaultValue($section->id);

				if($nodeId > 2)
					$this['menuForm']->removeComponent($this['menuForm']->getComponent('link_color'));
				....
			}
            $tpl = $this->template->setFile(__DIR__ . '/../templates/Menu/form.latte');
            $this->template->title = 'Vložit sekci' . $subtitle;
            $this->payload->tpl = (string) $tpl;
            $this->payload->modal = true;
            $this->redrawControl();
		 }

A pokud to takto pustim (tlacitkem v nejake sekci, takze $nodeId znam), validace probehne, ale uz ne processMenuForm. Jakmile podminku s $nodeId > 2 a removeComponen zakomentuji, formular se zpracuje – ale prvek link_color vidim, i kdyz bych nemel (dle podminky).

Nevim, zda jsem to popsal srozumitelne, pripadne doplni. Zatim netusim, proc se formular nezpracuje (nevrati payload ale celou stranku a vizualne se nic nezmeni, modal zustane otevreny).

Diky.

Editoval libik (8. 1. 2015 14:06)

libik
Člen | 100
+
0
-

Nikdo nic? Mam to kdyztak k dispozici v sandboxu, tak muzu poskytnout.