špatná detekce odesílacího tlačítka s jedním handlerem

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

mám formulář s více odesílacími tlačítky, které mají stejný handler .. a vždy je bráno jako to, kterým se formulář odeslal, to první.

<?php
 protected function createComponentOrderForm($name,$rows = 1) {

        $form = new AppForm($this,$name);

	...

	for ( $i = 1; $i <= $rows; $i++ ) {
            $f = $phm->addContainer($i);

	    ....

 	    $f->addSubmit('deleteRow', 'Odebrat řádek')
                ->setValidationScope(FALSE);
             $form['phm'][$i]['deleteRow']->onClick[] = callback($this, 'deleteRow');
	}

	....

	$form->onSubmit[] = callback($this, 'orderFormSubmitted');
        return $form;
?>

a do handleru deleteRow .. je vždy předán jako parametr submitButton první..
jsou zanořeny do containeru .. a to poslední jméno mají stejné..ale to by sna nemělo vadit..

např. $form[phm][1][deleteRow] $form[phm][2][deleteRow]

<?php
public function deleteRowFuel(SubmitButton $button) {

	dump buttonu a je to vzdy ten prvni
}
?>

kde by mohl být zakopaný pes? mám špatně nastavené ty callbacky?

Ola
Člen | 385
+
0
-

Pravděpodobně to v potřebné fázi dostane $rows=1 – není vhodné upravovat parametry funkce createComponentXXX, jediný způsob jak zajistit aby to fungovalo správně je přenést rows v URL (persistentní parametr), nebo v session.

Oggy
Člen | 306
+
0
-

Ola napsal(a):

Pravděpodobně to v potřebné fázi dostane $rows=1 – není vhodné upravovat parametry funkce createComponentXXX, jediný způsob jak zajistit aby to fungovalo správně je přenést rows v URL (persistentní parametr), nebo v session.

ale řádky se mi přídávají a odebírají správně.. to neřeším:-) ..
ale když už jsme to nakousli ..takhle vypadá přidání řádku..

<?php
public function addRow(SubmitButton $button) {

        $values = $button->getForm()->getValues();
        $values['rows'] ++;

        unset($this['orderForm']);
        $form = $this->createComponentOrderForm('orderForm',$values['rows']);

        $form->setDefaults($values);
        $form['fuelRows']->setValue($values['rows']);

        if( $this->isAjax()) {
            $this->invalidateControl('orderForm');
        }

    }
?>

tady není problém.. nebo jo?

v session jsem to měl.. ale potom to nerozezná, kdy se formulář zobrazuje poprvé, když jsem před chvílí měl v session např. 4 řádky.. tak v jaké chvíli je nulovat?

Oggy
Člen | 306
+
0
-

Ola napsal(a):

Pravděpodobně to v potřebné fázi dostane $rows=1 – není vhodné upravovat parametry funkce createComponentXXX, jediný způsob jak zajistit aby to fungovalo správně je přenést rows v URL (persistentní parametr), nebo v session.

tak to ještě trošku debuguju a máš asi pravdu.. ono to sice chodí ale při dumpu getValues() .. vrací vždy jen jeden řádek..

díky