Dynamicky stromovy formular – problem pridanie prvku pomocou Submit

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

Zdravim,

riesim dynamicky formular, ktory by mal byt sebestacny bez JS, riesim to tak, ze mam strom entit a popri prechadzani, vnich naviazem nejake security,cloneable,input atd … potom ich v sablone vykreslujem znovu prechadzanim …

Problem je, ze ked chcem klonovat nejaku vetvu, tak musim odoslat formular, aby sa nestratili data, ktore som doplnil, takze to riesim specialnym submitom, ktory nesie informaciu ktora vetva sa ma klonovat, lenze problem je v tom, ze v hentakom pripade, uz je formular hotovy a cela dynamicka tvorba uz prebehla bez informacie, ze ma nieco klonovat, pomocou handleAction zase neodosle nove data.
Skusil som zavolat v akcii na ten submit

$this['newForm']=$this->createComponentNewForm();

ale to pise, ze uz je vytvoreny…
Ked som jedneho casu skusal pridavat uz do hotoveho formularu prvky, tak sa nepridali…

Skusal som @persistent, ale to sa prejavi az po refreshi, resp na druhy krat, co mi bolo jasne hned, ale aspon som to skusil, mozno by islo redirectnut to nanovo, ale pride mi, ze sa zbytocne bude vsetko robit 2×

Nevie niekto pomoct ako to vyriesit?

Editoval kubco2 (27. 3. 2013 10:15)

kubco2
Člen | 9
+
0
-

najprv trochu OT:
chcem sa opytat, kedze mam moznost na CZ fore, preco vzdy na kazdom fore akurat moje temy su prazdne… Je to tym, ze chcem velmi zlozitu vec? Alebo neviem pisat zrozumitelne? Alebo si ma vyggoglite ako chuligana ? :D
Prosim Vas, nechcem ostat na internete ignorovany spolocnostou :)

Teraz k teme, nakoniec som sa rozhodol, ze kazdy strom budem nacitavat iba raz a ulozim do sessions…
A to k tomu formularu, ze nejde pripojit input po vytvoreni:
Netreba zabudat, ze po submite je vytvorena hlavna cast formularu, a treba tam pridat este metodu ktora dorobi zvysok inputov.
Mne prislo divne, to ze sa to chovalo akoze tam ten input je(lebo som ho na skusku pridal priamo v render metode) aj sa ukladalo v policku medzi submitmi, ale nebol v dump-e z form->values, pretoze ten prvok sa nestihol vytvorit, a tym padom ani ziadny error.

Editoval kubco2 (28. 3. 2013 10:34)

castamir
Člen | 629
+
0
-

Možná by bylo příště vhodné sem přidat nějaký kód.

Jestli jsem to pochopil správně, tak máš nějaké submit buttony, které ti mají dělat nějakou logiku, ale hodnoty zpracovávat ještě nechceš. V takovém případě se to dá řešit následovně:

$form->addSubmit("button", "Caption")->onClick[] = $this->tvujHandler1;

S tím, že si budeš muset navolit vhodná validační pravidla, nebo je naopak v daném případě ignorovat pomocí $form['button']->setValidationScope(FALSE). Zároveň, pokud máš formulář nastaven onSuccess[], tak se automaticky provede i ten. Řešením je přidat do jeho metody podmínku na tlačítko, které formulář odeslalo.

if ($form['save']->isSubmittedBy()) ...
kubco2
Člen | 9
+
0
-

vdaka za info,

pouzivam teda sessions, ale nechapem jej spravanie nette 2.1dev:

private function getSession()
    {
        return $this->presenter->getSession();
    }
    private function getStructure()
    {
        $section = $this->getSession()->getSection("component.editableTree.".$this->getName().".".$this->object->getId());
        $section['treeParts']; ----------------- bez tohto mi vobec nenacita DATA v sekcii, mohlo by tam byt aj nieco ine napr $section[1]=1 alebo podobne, ako keby sa sekcia potrebovala inicializovat, aj ked v tom IF nieco take je ... neviem :/
        if( $section['treeParts']==null ) {
            $values=$this->object->getValuesTree();
            $section['treeParts']=$this->loadStructure($values);
        }
        return $section['treeParts'];
    }

edit:
tak som skusil prehodit nette 2.0.10
ale rovnaky problem
skusil som to aj pozmenit:

	//$section['treeParts']; ------------ proste bez tohto riadku sa vobec neinicializuje DATA cast sekcie
	$saved = $section['treeParts'];
//if( $section['treeParts']==null ) {
if( empty($saved) ) {
    $values=$this->object->getValuesTree();
    $section['treeParts']=$this->loadStructure($values);
}

Editoval kubco2 (28. 3. 2013 16:49)