Validace formuláře přes onValidate tlačítkem se setValidationScope(FALSE)

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

Ahoj,
mám ve formuláři dvě tlačítka:

$this->addSubmit('save', 'Uložit');

$this->addSubmit('delete', 'Smazat')
  ->setValidationScope(FALSE);

V JS se to chová přesně tak jak má, tedy tlačítko Smazat nic nevaliduje.

V továrničce mám toto:

$form->onValidate[] = $this->editFormValidated;

$form['save']->onClick[] = $this->editFormSaved;
$form['delete']->onClick[] = $this->editFormDeleted;

Zajímalo by mě, z jakého důvodu se po stisknutí tlačítka Smazat volá funkce navěšená na události onValidate, když tlačítko definovalo setValidationScope(FALSE).

Samozřejmě v té validační metodě to můžu ošetřit podmínkou podle stisknutého tlačítka, ale jde mi spíše o logiku věci. Očekával jsem, že se onValidate zavolá na všech tlačítkách, které nemají setValidationScope(FALSE).

Díky

old.gandalf
Člen | 17
+
0
-

onValidate[] callbacky jsou volány vždy, setValidationScope() je nevypíná. Ta má vliv pouze na vypnutí pravidla nasazeného na konkrétní prvek voláním

$form['tweet']->addRule(Form::MAX_LENGTH, "Vstup je příliš dlouhý.", 160);

$form['submitButton']->setValidationScope(FALSE);	//ověření délky neproběhne
David Matějka
Moderator | 6445
+
0
-

jak pise @old.gandalf

Ale u containeru se to chova jinak, viz doc https://doc.nette.org/cs/forms#…