obsluzne handlery zo sticky

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

Z vlakna Best practice: Formulářová tlačítka a prikladu s obsluhou:

$form->addSubmit('ok', 'Send')
	->onClick[] = 'OkClicked'; // nebo 'OkClickHandler'
$form->addSubmit('cancel', 'Cancel')
	->setValidationScope(FALSE)
	->onClick[] = 'CancelClicked'; // nebo 'CancelClickHandler'


// obslužné handlery:
function OkClicked(SubmitButton $button)
{
	// submitted and valid
	save($form->getValues());
	redirect(...);
}

function CancelClicked(SubmitButton $button)
{
	// process cancelled
	redirect(...);
}

1: ako sa v obsluznom handleri OkClicked dostanem k instancii $form a tym aj k hodnotami zo submitnuteho formulara ?

2a: oba handlery v tom priklade su funkcie v ramci metody Presenteru zobrazujucej formular?
2b: alebo su to rovnako metody Presenteru ?

David Grudl
Nette Core | 8147
+
0
-

edke napsal(a):

1: ako sa v obsluznom handleri OkClicked dostanem k instancii $form a tym aj k hodnotami zo submitnuteho formulara ?

přes $button->getForm();

2a: oba handlery v tom priklade su funkcie v ramci metody Presenteru zobrazujucej formular?
2b: alebo su to rovnako metody Presenteru ?

jsou to obyčejné funkce. Metody je potřeba zapsat např. takto:

...->onClick[] = array($this, 'OkClicked');
edke
Člen | 198
+
0
-

David Grudl wrote:

přes $button->getForm();

Och, tusil som ze take nieco tam bude :) Tusim musim castejsie pouzivat

	var_dump( get_class_methods($button) );

aby som neotravoval s trivialnymi vecami :)

jsou to obyčejné funkce. Metody je potřeba zapsat např. takto:

...->onClick[] = array($this, 'OkClicked');

Nie je funkcia v ramci metody trosku „prasarna“ ? Nie je to takto cistejsie ?

	public function actionForm( $id = 0 ) {

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

		...


		$form->addSubmit('apply', $id > 0 ? 'Upraviť' : 'Pridať' )
			->onClick[] = array( $this, 'form_onApply');

		$form->addSubmit('cancel', 'Cancel')
			->setValidationScope(FALSE)
			->onClick[] = array( $this, 'form_onCancel');


		...


	public function form_onApply( SubmitButton $button )
	{
		$model= new $this->tableName;
		$id = (int) $this->getParam('id');

		$values= $button->getForm()->getValues();
		$values['password']= md5($values['password']);

		unset( $values['password2']);
		if ( empty($values['password']) ) {
			unset( $values['password']);
		}

		if ($id > 0) {
			$model->update($id, $values);
		} else {
			$model->insert($values);
		}

		//TODO user message

		$this->redirect('default');
	}

	public function form_onCancel( SubmitButton $button )
	{
		//TODO overenie zmeneneho formulara
		//TODO user message

		$this->redirect('default');
	}
David Grudl
Nette Core | 8147
+
0
-

edke napsal(a):

Och, tusil som ze take nieco tam bude :) Tusim musim castejsie pouzivat

Doporučuju API referenci

Nie je funkcia v ramci metody trosku „prasarna“ ? Nie je to takto cistejsie ?

Určitě je. Ani k takovému kombinování nenabádám. Odkazovaný příklad funguje jen jako ukázka použití, není tam nikde řečeno, že jde o kód v rámci metody.

edke
Člen | 198
+
0
-

David Grudl wrote:

Doporučuju API referenci

Ked uz sme pri tom API, je vzdy s kazdym revision aktualizovane ako to webove, tak to na stiahnutie ?

David Grudl
Nette Core | 8147
+
0
-

Ano, všechno vždy aktualizuju v jednom kroku.